38

我应该如何确定监听套接字的 backlog 参数使用什么?简单地指定一个非常大的数字是否有问题?

4

3 回答 3

35

Winsock Programmer's FAQ中有一个很长的答案。它详细介绍了标准设置,以及在 NT 4.0 的修补程序中添加的动态积压功能。

于 2008-09-22T13:56:26.720 回答
4

我第二次使用 SOMAXCONN,除非您有特定原因使用短队列。

请记住,如果队列中没有空间用于新连接,则不会发送 RST,允许客户端通过重新传输 SYN 自动继续尝试连接。

此外, backlog 参数在不同的套接字实现中可能具有不同的含义。

  • 在大多数情况下,它意味着半开连接队列的大小,在某些情况下,它意味着完成连接队列的大小。
  • 在许多实现中,积压参数将相乘以产生不同的队列长度。
  • 如果指定的值太大,所有实现都会默默地将值截断为最大队列长度。
于 2008-09-22T14:03:42.943 回答
1

文档

SOMAXCONN 的 backlog 值是一个特殊的常量,它指示负责 socket 的底层服务提供者将挂起连接的队列长度设置为最大合理值。

于 2008-09-22T13:37:06.423 回答