日期:2014-05-16  浏览次数:20756 次

多线程socket的listen中backlog的含义
问题背景
我在程序中创建3个子线程
每个线程中都创建一个tcp的socket,它们绑定的端口不同,
比如分别是thread1绑定端口123,thread2绑定端口456,thread3绑定端口789
我在每个线程中都用到listen函数
这时候backlog的含义是什么?
是代表每个socket的连接请求数量?
还是整个进程的连接请求数量?

------解决方案--------------------
函数的第二个参数规定了内核为此套接口排队的最大连接数
--出自《unix网络编程》

应该是每个socket的,
但这和 未完成连接队列、已完成连接队列的数量关系, 要看系统具体实现
------解决方案--------------------
并发连接数的控制。

如果同一个时间点有两个用户发起connect操作,是可以直接被服务器端协议栈处理的,这两个用户的connect是可以立即返回的,即使服务器端没有进行accept处理。

那么第三个用户发起connect操作的时候,第三个用户connect是不会握手成功的。