在成功的closesocket()调用之后,Winsock TCP侦听器保持在LISTENING状态

时间:2012-01-26 19:31:55

标签: c++ tcp listener winsock

我正在创建一个现有的DLL,其中创建了一个TCP侦听套接字,并设置为在发生故障时立即使用SO_REUSEADDR重新绑定到同一套接字。然而,目前,即使在成功调用closesocket()之后,仍存在一个监听器将保持在LISTENING状态的问题;由于它没有进入TIME_WAIT,因此在重新创建套接字时会在同一端口上创建一个新的侦听器。然后客户端无法连接到新的侦听器(可能)。 SO_LINGER设置为0秒。套接字关闭时没有待处理的传输。最旧的插座似乎在大约十秒后关闭而没有明显进入另一个状态。

成功调用closesocket()后,什么可以使侦听器保持在LISTENING状态?

1 个答案:

答案 0 :(得分:1)

  1. 你关闭了错误的套接字。
  2. 您复制了句柄,忘了关闭副本。
  3. 其他人抢购了港口。
  4. 当其他内容失败时,您的失败代码会检测到侦听器失败。
  5. 您的侦听器在未失败时报告失败。
  6. 你的失败模式会破坏状态,所以closesocket()会关闭其他东西。