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