11

客户端先关闭套接字,当服务器没有太多数据时,tcp连接关闭是可以的,例如:

FIN -->
   <-- ACK
   <-- FIN, ACK
ACK -->

当服务器忙于发送数据时:

FIN -->
    <-- ACK,PSH
RST -->

并且服务器连接进入 CLOSE_WAIT 状态并挂在那里很长时间。

这里有什么问题?客户端相关还是服务器相关?这发生在 Redhat5 的本地套接字上。

这篇文章讲了为什么会发送“RST”,但是不知道为什么服务器连接卡在CLOSE_WAIT上,并且不发送FIN。

[编辑]我忽略了最重要的信息,这发生在 qemu 的 slirp 网络仿真上。处理紧密连接似乎是 slirp bug 的问题。

4

3 回答 3

2

这意味着流中有未读数据,客户端尚未完成读取。

您可以使用该SO_LINGER选项将其强制关闭。这是 Linux 的相关文档(另请参见选项本身,这里),以及 Win32 的 [这里是匹配函数 2]。

服务器端保持打开状态,因此您可以尝试在服务器端禁用SO_LINGER.

于 2009-12-16T09:31:49.583 回答
0

这可能意味着服务器尚未关闭套接字。您可以通过使用“lsof”列出该进程打开的文件描述符(包括 TCP 套接字)来轻松判断这一点。解决方法是让进程在完成时始终关闭套接字(即使在错误情况下等)

于 2009-12-16T23:12:14.237 回答
0

这是 qemu 的一个已知缺陷

于 2010-01-07T12:27:32.773 回答