TCP CLOSE_WAIT状态..&新的联系

时间:2012-01-12 01:32:12

标签: linux sockets tcp

我在一个众所周知的TCP端口上有一台服务器,连接了许多客户端。客户端使用非阻塞选项连接到服务器。

当我终止服务器进程时,客户端套接字进入CLOSE_WAIT状态。现在,如果我重新启动服务器进程并且客户端再次尝试连接,则connect()调用似乎阻止,即使它应该是非阻塞的。

实际的修复可能实际上是在服务器死亡时关闭套接字。但我试图了解当前的行为..

  • 当现有连接处于CLOSE_WAIT时阻止建立新连接的是什么?
  • 为什么连接阻塞即使设置了非阻塞选项?

这可以在Linux 2.6.3x内核中看到..

2 个答案:

答案 0 :(得分:1)

这听起来像客户端的错误。如果您将套接字设置为非阻塞,然后调用connect,则connect调用无法阻止。您可以粘贴创建套接字的客户端代码,将其设置为非阻塞,并调用connect吗?另外,你是否肯定它在connect通话本身被阻止了?

答案 1 :(得分:0)

我相信您的问题已完全回答here并与SO_REUSEADDR相关。关于answer的问题的另一个Using SO_REUSEADDR - What happens to previously open socket?也是相关的。