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

时间:2011-01-17 03:22:22

标签: windows winsock

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

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

谢谢!

参考:listen() on MSDN Library

5 个答案:

答案 0 :(得分:8)

在NTWS 4.0上回归5:http://support.microsoft.com/kb/127144

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

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

我不确定为什么有人会回答这个假设为什么问这个问题。了解实际答案是有正当理由的。

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

答案 1 :(得分:0)

我在Windows 7上看到它是200,但我不知道它是否与操作系统有关,或者网络驱动程序等是否会产生影响。

您可以通过侦听端口并与该端口建立大量连接来实验性地确定这一点,直到您完成为止(然后查看您有多少)。

如果您采用Len的建议并使用带有IOCP的AcceptEx,您可以通过在等待连接池中提前调用它来确定您有多大的积压。我已经看到这项工作在池中有多达1,600个连接,但它似乎也有限制。

答案 2 :(得分:0)

对于它的价值,Visual Studio 9.0(aka 2008)的异步套接字Listen()代码中的默认值为5。 我在c:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ include \ afxsock.h中找到了它:     BOOL Listen(int nConnectionBacklog=5);

也记录在这里: https://docs.microsoft.com/en-us/cpp/mfc/reference/casyncsocket-class?view=vs-2019#listen

答案 3 :(得分:0)

listen(socket,backlog)函数的backlog参数限制为SOMAXCONN。如果设置为SOMAXCONN,则负责套接字的基础服务提供商会将积压设置为最大合理值 1

Windows平台上的最大值为 2

  • Windows套接字1定义了SOMAXCONN = 5。 Winsock 1.1是Windows 95和Windows NT 3.5的一部分。
  • Windows套接字2定义了SOMAXCONN = 0x7fffffff并将侦听积压限制为一个较大的值(通常为数百或更大)。 Winsock 2.1是Windows 95的附加组件,也是Windows 98,Windows NT 4.0和所有后续Windows版本的一部分。
  • Windows 8包括Winsock的“ RIO”(注册IO)扩展。这些扩展旨在减少网络应用程序的延迟 3 。宏SOMAXCONN_HINT(N)可用于将积压设置为比SOMAXCONN更大的值。积压值将为N,并调整为(200,65535) 1

注意

“在蓝牙应用程序中调用listen()函数时,强烈建议为积压参数使用一个低得多的值(通常为2到4),因为仅接受少数客户端连接。这减少了分配给侦听套接字使用的系统资源。此建议也适用于仅需要几个客户端连接的其他网络应用程序。“ 1

来源

  1. listen function, Winsock2.h documentation, Windows Dev Center
  2. Winsock’s Listen() Backlog Offers More Flexibility In Windows 8+
  3. Winsock, Wikipedia

答案 4 :(得分:-1)

一旦你知道答案,你希望实现什么目标?

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

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

我在博客herehere上讨论了这类事情。