1

我写了一个简单的 tcp 客户端和服务器并运行它们我注意到当我ctrl+c用来结束程序时 tcp 连接被关闭但 tcp 连接状态就像TIME_WAIT 我再次运行 tcp 客户端和服务器时 tcp 连接不能再次建立一个RST数据包总是由tcp服务器发送我必须等待一段时间才能建立下一个tcp连接

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

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

谢谢

4

1 回答 1

2

这个问题的解决方案是设置 SO_REUSEADDR 套接字选项。这告诉堆栈允许绑定碰巧处于 TIME_WAIT 状态的地址。

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

这是关于将 SO_REUSEADDR 用于 TCP 和 UDP 的一个很好的答案。

于 2013-04-15T14:20:25.907 回答