TCP 服务器挂起,不响应 SYN

TCP server hangs, not responding to SYN

我有一个奇怪的 TCP 服务器问题,有时会挂起。奇怪的问题是,当它挂起时,它不会收到任何新连接,即不会响应初始 TCP SYN 数据包。我非常确定,由于 TCP 握手是由内核处理的,即使程序挂起,客户端仍应至少接收到初始 SYN、ACK。如果有人知道程序挂起的情况会阻止 OS 甚至无法完成 TCP 握手(而且它永远不会关闭侦听套接字),请告诉我。

P.S。 该程序是用 C++ 编写的,OS 是 Windows Server 2016.

很可能是监听队列已满。不响应初始 SYN 会导致另一方稍后尝试另一个 SYN。幸运的话,此时监听队列不会满。该程序可能没有足够频繁地调用 accept(或一些类似的函数)。

也有可能程序正在使用选择性接受功能(请参阅 WSASelectlpfnCondition 参数)来选择不响应此连接尝试。