我有一个众所周知的TCP端口上的服务器连接到一群客户端。客户端使用非阻塞选项连接到服务器。TCP CLOSE_WAIT状态..&新连接
当我杀死服务器进程时,客户端套接字进入CLOSE_WAIT状态。现在,如果我重新启动服务器进程并尝试再次连接客户端,connect()调用似乎会阻止,即使它应该是非阻塞的。
实际的修复可能实际上是关闭套接字时服务器死亡。但我试图了解当前的行为..
- 当一个现有的连接在CLOSE_WAIT什么是阻止建立新的连接?
- 为什么连接阻塞即使是非阻塞选项设置?
这被认为是在Linux内核2.6.3x ..
2.6.3x内核没有多大意义。 2.6.30和2.6.38之间有相当大的差异。将内核升级到3.0.0或3.1.0可能会有所帮助。 – 2012-01-12 01:42:50
你在使用'SO_REUSEADDR'吗?请参阅http://stackoverflow.com/questions/775638/using-so-reuseaddr-what-happens-to-previously-open-socket – 2012-01-12 01:46:12
@BasileStarynkevitch 2.6.3x是足够的信息为这个问题。这似乎是一个基本的TCP/IP行为,不可能经常改变。实际版本是2.6.32。不,我不打算尝试3.0.0的假设,行为可能会在3.0.0 – Manohar 2012-01-12 01:47:47