[英]tcp connection can't be established when there is a tcp connection with state `TIME_WAIT`
我编写了一个简单的tcp客户端和服务器并运行它们,我注意到当我使用ctrl+c
结束程序时,tcp连接将被关闭,但是tcp连接状态类似于TIME_WAIT
然后如果我再次运行tcp客户端和服务器,则tcp无法再次建立连接总是由tcp服务器发送RST
数据包我必须等待一段时间,直到可以建立下一个tcp连接
这是什么原因?如何解决这个问题?
此外,我注意到在一台主机上,当tcp连接处于状态FIN_WAIT_2
即使它没有收到FIN
,tcp连接也会在一段时间后关闭,为什么?
谢谢
解决此问题的方法是设置SO_REUSEADDR套接字选项。 这告诉堆栈允许对碰巧处于TIME_WAIT状态的地址进行绑定。
TIME_WAIT状态的原因似乎是为了让散乱的数据包到达一段时间。 如果堆栈不能确保正常关闭连接,则可能有数据包在传输中,或者发送方甚至可能正在主动发送更多数据。 堆栈希望避免将这些数据包与新绑定的连接的流量混合在一起。
这是将SO_REUSEADDR用于TCP和UDP的一个很好的答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.