listen()每个Windows版本的最大队列大小

rjo*_*don 3 windows winsock

Winsock函数listen(socket,backlog)有一个参数来指定挂起连接的队列大小.程序应该通过SOMAXCONN将队列设置为其最大大小.

问题:每个Windows版本的最大队列大小是多少:2000,XP,Vista,7?

谢谢!

参考:MSDN Library上的listen()

小智 8

它是NTWS 4.0上的5:http://support.microsoft.com/kb/127144

我相信XP也是这样,虽然从XP上很难找到微软的具体内容.(至少对我而言,这就是我最终希望获得实际答案的方式).

快速安装Java测试表明,Windows 7 Pro的默认值为50,限制为200. FWIW.

我不确定为什么有人会回答这个问题并假设为什么要问这个问题.了解实际答案有合理的理由.

例如,您有软件可能会收到大量请求.如果操作系统的最大积压数为5,则即使尽快将其关闭,也可能最终拒绝连接.积压的200减轻了这一点.因此,您可能希望使OS系统要求不使用具有此类积压限制的操作系统.


Len*_*ate -5

一旦你知道这个问题的答案,你希望实现什么目标?

有很多方法可以提高连接接受的性能,您应该关注这一点,而不是实际排队连接数。

监听积压应该简单地适应服务器软件可以接受新连接的速率和这些新连接到达的速率之间的短期差异。您应该努力确保您的服务器能够以合适的速率接受新连接,理想情况下,通过使用AcceptEx()IOCP 进行重叠接受调用,并在服务器启动时发布适当数量的重叠接受,然后在建立连接时将其填充。

我在我的博客上谈论了这类事情,这里和这里。