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

jbu*_*jbu 0 java connection tcp time-wait wait

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

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

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

我用套接字方法玩了一下 - 运气不好:set_so_timeout(),set_keepalive(),set_so_linger()和set_reuseaddr() - 这篇文章的确切拼写可能不正确.

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

请告诉我.

谢谢,jbu

pax*_*blo 6

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

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

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

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

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

  • @Monis,问题不是本地的,你可以通过刷新修复.网络上可能仍然存在数据包浮动.如果您重复使用相同的5元组并且其中一个旧数据包出现,它将阻碍您,最多导致重试,最糟糕的是,数据损坏(在极其不可思议的情况下,数据包显示正确序列号). (3认同)