我写了一个简单的tcp客户端和服务器
跑了他们
我注意到当我使用ctrl+c
结束程序时
tcp连接将被关闭
但是tcp连接状态就像TIME_WAIT
然后如果我再次运行tcp客户端和服务器
无法再次建立tcp连接
始终由tcp服务器发送RST
数据包
我必须等待一段时间才能建立下一个tcp连接
这是什么原因以及如何处理这个问题?
此外,当一个tcp连接处于状态FIN_WAIT_2
时,我注意到一台主机
即使它没有收到FIN
,tcp连接也会在一段时间后关闭
,为什么呢?
感谢
答案 0 :(得分:2)
此问题的解决方案是设置SO_REUSEADDR套接字选项。这告诉堆栈允许对恰好处于TIME_WAIT状态的地址进行绑定。
TIME_WAIT状态的原因似乎是允许一些时间让落后者数据包到达。如果堆栈无法确保连接正常关闭,则可能是传输中的数据包或发送方甚至可能主动发送更多数据。堆栈希望避免将这些数据包与新绑定连接的流量混合。
以下是关于使用SO_REUSEADDR进行TCP和UDP的good answer。