Winsock TCP侦听器在成功执行closesocket()调用后保持LISTENING状态

Winsock TCP listener stays in LISTENING state after successful closesocket() call

本文关键字:调用 状态 LISTENING 侦听器 TCP 成功 closesocket 执行 Winsock      更新时间:2023-10-16

我正在处理一个现有的DLL,其中创建了一个TCP侦听套接字,并设置为在失败时使用SO_REUSEADDR立即重新绑定到同一套接字。然而,目前存在一个问题,即即使在成功调用closesocket()之后,侦听器仍将处于LISTING状态;由于它没有输入TIME_WAIT,所以在重新创建套接字时,会在同一端口上创建一个新的侦听器。然后客户端无法连接到新的侦听器(大概是这样)。SO_LINGER设置为0秒。当插座关闭时,没有挂起的传输。最古老的插座似乎在大约十秒钟后关闭,而没有明显进入另一种状态。

在成功调用closesocket()之后,什么能让监听器保持在LISTING状态?

  1. 你关错了插座
  2. 您复制了句柄,却忘记关闭副本
  3. 其他人抢购一空
  4. 当其他事情发生故障时,您的故障代码会检测到侦听器的故障
  5. 你的听众在没有失败的情况下报告失败
  6. 您的故障模式会破坏状态,所以closesocket()会关闭其他东西