对于ChannelOption.SO_BACKLOG的解释
客户端向服务端connect的时候,发送带有SYN标志的包(第一次握手)
服务端收到客户端发来的SYN时,向客户端发送SYN ACK 确认(第二次握手)
此时TCP内核模块把客户端连接加入到A队列中,然后服务器收到客户端发来的ACK时(第三次握手)
TCP没和模块把客户端连接从A队列移到B队列,连接完成,应用程序的accept会返回
也就是说accept从B队列中取出完成三次握手的连接
A队列和B队列的长度之和是backlog,当A,B队列的长之和大于backlog时,新连接将会被TCP内核拒绝
所以,如果backlog过小,可能会出现accept速度跟不上,A.B 队列满了,导致新客户端无法连接,
要注意的是,backlog对程序支持的连接数并无影响,backlog影响的只是还没有被accept 取出的连接