Tcp 连接挂在 CLOSE_WAIT 状态
-
19-09-2019 - |
题
客户端首先关闭套接字,当服务器没有太多数据时,tcp 连接关闭是可以的,如下所示:
FIN -->
<-- ACK
<-- FIN, ACK
ACK -->
当服务器正忙于发送数据时:
FIN -->
<-- ACK,PSH
RST -->
服务器连接进入 CLOSE_WAIT 状态并长时间挂起。
这里有什么问题?客户端相关还是服务器相关?Redhat5 上的本地套接字会发生这种情况。
这 文章 说说为什么发送“RST”,但不知道为什么服务器连接卡在CLOSE_WAIT,并且不发送FIN出去。
[编辑]我忽略了最重要的信息,这发生在 qemu 的 slirp 网络仿真上。这似乎是处理紧密连接的 slirp bug 的问题。
解决方案 3
这是一个已知的 缺点 对于 qemu。
其他提示
这意味着有流中留在未读取的数据,即客户端没有读完。
可以通过使用SO_LINGER
选项强制其关闭。 下面是Linux的相关文件(也看到选项本身的此处)和[这里的匹配函数2]为Win32
这是保持开放的服务器端,所以它在服务器端,你可以尝试禁用SO_LINGER
。
这可能意味着服务器没有关闭套接字。您可以轻松地通过使用“lsof的”列出文件描述符通过这一过程,其中将包括TCP套接字开放讲这个。解决方法是具有处理时,它的结束始终关闭套接字(即使在错误的情况下等)
不隶属于 StackOverflow