我在一个众所周知的TCP端口上有一台服务器,连接了许多客户端。客户端使用非阻塞选项连接到服务器。
当我终止服务器进程时,客户端套接字进入CLOSE_WAIT状态。现在,如果我重新启动服务器进程并且客户端再次尝试连接,则connect()调用似乎阻止,即使它应该是非阻塞的。
实际的修复可能实际上是在服务器死亡时关闭套接字。但我试图了解当前的行为..
这可以在Linux 2.6.3x内核中看到..
答案 0 :(得分:1)
这听起来像客户端的错误。如果您将套接字设置为非阻塞,然后调用connect
,则connect
调用无法阻止。您可以粘贴创建套接字的客户端代码,将其设置为非阻塞,并调用connect
吗?另外,你是否肯定它在connect
通话本身被阻止了?
答案 1 :(得分:0)
我相信您的问题已完全回答here并与SO_REUSEADDR
相关。关于answer的问题的另一个Using SO_REUSEADDR - What happens to previously open socket?也是相关的。