TIME_WAIT中的tcp连接将不允许重新连接,java

时间:2009-09-29 01:50:30

标签: java tcp connection wait time-wait

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

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

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

我玩了很多运气 - 套接字方法:set_so_timeout(),set_keepalive(),set_so_linger()和set_reuseaddr() - 该方法的确切拼写可能不正确。

我的问题是如何从TIME_WAIT状态获取连接,以便我可以立即重新建立连接?

请告诉我。

谢谢, JBU

1 个答案:

答案 0 :(得分:5)

从TIME_WAIT获取连接的最佳方法是(令人惊讶地)等待: - )

这就是TCP / IP的工作原理。会话由元组(sourceIP, sourcePort, destIP, destPort, protocol)标识,并且您无法重新使用它的原因是因为网络中的某些数据包仍然存在。

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

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

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