当状态为“TIME_WAIT”的tcp连接时,无法建立tcp连接

时间:2013-04-15 11:59:33

标签: c linux tcp network-programming

我写了一个简单的tcp客户端和服务器 跑了他们 我注意到当我使用ctrl+c结束程序时 tcp连接将被关闭 但是tcp连接状态就像TIME_WAIT 然后如果我再次运行tcp客户端和服务器 无法再次建立tcp连接 始终由tcp服务器发送RST数据包 我必须等待一段时间才能建立下一个tcp连接

这是什么原因以及如何处理这个问题?

此外,当一个tcp连接处于状态FIN_WAIT_2时,我注意到一台主机 即使它没有收到FIN,tcp连接也会在一段时间后关闭 ,为什么呢?

感谢

1 个答案:

答案 0 :(得分:2)

此问题的解决方案是设置SO_REUSEADDR套接字选项。这告诉堆栈允许对恰好处于TIME_WAIT状态的地址进行绑定。

TIME_WAIT状态的原因似乎是允许一些时间让落后者数据包到达。如果堆栈无法确保连接正常关闭,则可能是传输中的数据包或发送方甚至可能主动发送更多数据。堆栈希望避免将这些数据包与新绑定连接的流量混合。

以下是关于使用SO_REUSEADDR进行TCP和UDP的good answer