listen函数中backlog的含义

TCP中服务器端调用listen函数监听客户端的连接,listen函数的第二个参数backlog到底是什么意思呢?


可以这样理解:

服务器端TCP内核模块维护有2个队列,我们称之为A,B吧。

客户端向服务器端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取出的连接。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值