最近在写一个socket程序。发现网上对于socket_listen里面的第二个参数的作用解释的都是不是很清楚,所有就将自己的一些理解写出来,让大家参考下。
首先要明白三次握手的。当然能点进来的应该都知道什么是三次握手,这里就不废话了。
当有多个客户端一起请求的时候,服务端不可能来多少就处理多少,这样如果并发太多,就会因为性能的因素发生拥塞,然后造成雪崩。所有就搞了一个队列,先将请求放在队列里面,一个个来。socket_listen里面的第二个参数backlog就是设置这个队列的长度。如果将队列长度设置成10,那么如果有20个请求一起过来,服务端就会先放10个请求进入这个队列,因为长度只有10。然后其他的就直接拒绝。tcp协议这时候不会发送rst给客户端,这样的话客户端就会重新发送SYN,以便能进入这个队列。
如果三次握手完成了,就会将完成三次握手的请求取出来,放入另一个队列中,这样队列就空出一个位置,其他重发SYN的请求就可以进入队列中。
不过现在这个参数没什么用了,因为SYN Cookie。有机会给大家讲下SYN Cookie。