当客户端先关闭套接字时,如果从服务器传输的数据不多,TCP连接关闭就可以了,如下:
FIN -->
<-- ACK
<-- FIN, ACK
ACK -->
当服务器正在忙于发送数据时:
FIN -->
<-- ACK,PSH
RST -->
服务器连接进入CLOSE_WAIT状态并长时间挂起。
问题出在哪里?是客户端相关还是服务器相关?这在Redhat5的本地套接字上发生。
这篇文章讨论了为什么会发送“RST”,但我不知道为什么服务器连接会卡在CLOSE_WAIT状态,并且没有发送FIN。
[编辑]我忽略了最重要的信息,这发生在qemu的slirp网络仿真中。这似乎是一个处理关闭连接的slirp bug问题。