TIME_WAIT中的tcp连接将不允许重新连接,java
在与服务器建立TCP连接后,我关闭了我的linux应用程序并调用了Socket.close()。
检查netstat -pant,我看到连接处于TIME_WAIT状态。
这使我无法立即连接回服务器,因为我使用相同的端口进行连接。 相反,我必须等待连接到TIME_WAIT状态的超时,然后才能重新连接。
我用套接字方法玩了很多运气 – set_so_timeout(),set_keepalive(),set_so_linger()和set_reuseaddr() – 这篇文章的确切拼写可能不正确。
我的问题是如何从TIME_WAIT状态获得连接,以便我可以立即重新建立连接?
请告诉我。
谢谢,jbu
从TIME_WAIT获取连接的最佳方法是(令人惊讶地)等待:-)
这就是TCP / IP的工作原理。 会话由元组(sourceIP, sourcePort, destIP, destPort, protocol)
并且您无法重新使用它的原因是因为可能有数据包仍在网络中的某个地方。
TIME_WAIT状态通常是最大数据包生命周期的两倍,您不应该摆弄它,因为这可能导致数据包显示在上一个会话中(这会搞砸当前会话)。
理想情况下,您应该从不同的源端口连接,然后您就可以立即打开会话。
你应该注意的另一件事是非常封闭的会议。 我总是订阅客户端应该关闭会话的指南(并且干净地关闭它)。 这最大限度地减少了长时间半封闭会话的可能性。