套接字关闭后为什么端口没有立即释放?

Xuf*_*eng 4 c sockets

我发现默认情况下OS不会立即释放服务器关闭后服务器套接字使用的端口.通过SO_REUSEADDR在设置套接字时给出可以避免这个问题,但我不明白为什么保持端口一段时间是有用的.如果服务器关闭,套接字关闭,传输到该端口的任何数据都不会被处理吗?

das*_*ght 5

当端口被释放时,它进入TIME_WAIT状态以防止在到达第一个连接的路由时被延迟的重复数据包被传递到第二个连接.

以下是没有这种情况的情况TIME_WAIT:

  • 从(地址a,端口p)到(地址b,端口q)的连接终止
  • 建立从(地址a,端口p)到(地址b,端口q)的第二个连接
  • 来自第一连接的重复分组在网络中被延迟,并且当其序列号在第二连接的窗口中时到达第二连接.

这是一个很好的答案,解释如何处理这个问题.这篇文章解释了如何减轻TIME_WAIT繁忙服务器的影响.