0

在与服务器建立 tcp 连接后,我关闭了我的linux应用程序并调用了 Socket.close()。

检查 netstat -pant,我看到连接处于 TIME_WAIT 状态。

这会阻止我立即连接回服务器,因为我使用相同的端口进行连接。相反,我必须等待连接超时 TIME_WAIT 状态才能重新连接。

我玩过 - 没有运气 - 使用套接字方法:set_so_timeout()、set_keepalive()、set_so_linger() 和 set_reuseaddr() - 在这篇文章中,该方法的确切拼写可能不正确。

我的问题是如何让连接脱离 TIME_WAIT 状态,以便立即再次建立连接?

请告诉我。

谢谢,jbu

4

1 回答 1

6

使连接脱离 TIME_WAIT 的最佳方法是(令人惊讶地)等待 :-)

这就是 TCP/IP 的工作原理。会话由元组标识,(sourceIP, sourcePort, destIP, destPort, protocol)您不能重用它的原因是因为它的数据包可能仍然存在于网络中的某个地方。

TIME_WAIT 状态通常是最大数据包生命周期的两倍,你应该摆弄它,因为这可能会导致数据包从上一个会话中出现(这会搞砸你当前的会话)。

理想情况下,您应该从不同的源端口连接,然后您将能够立即打开会话。

您应该注意的另一件事是严重关闭的会话。我一直订阅客户端应该关闭会话(并干净地关闭它)的指南。这最大限度地减少了长时间半封闭会话的可能性。

于 2009-09-29T01:55:30.937 回答