客户端首先关闭套接字,当服务器没有太多数据时,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套接字开放讲这个。解决方法是具有处理时,它的结束始终关闭套接字(即使在错误的情况下等)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top