【发布时间】:2012-05-25 01:07:57
【问题描述】:
我有一个 JAVA 项目,在其中我将 tcp 套接字绑定到特定端口。
当我为端口 X 上的套接字绑定调用 close() 方法时,我在几秒钟内无法在端口 X 上绑定新套接字,尽管我已经调用了 close() 方法。但是过几秒就可以绑定了。
这种情况正常吗?还是我应该再次检查我的代码?
【问题讨论】:
-
也许代码中的关键行会对我们有所帮助。
我有一个 JAVA 项目,在其中我将 tcp 套接字绑定到特定端口。
当我为端口 X 上的套接字绑定调用 close() 方法时,我在几秒钟内无法在端口 X 上绑定新套接字,尽管我已经调用了 close() 方法。但是过几秒就可以绑定了。
这种情况正常吗?还是我应该再次检查我的代码?
【问题讨论】:
我在特定端口绑定 tcp 套接字
这就是问题所在,解决方法是不要这样做。让系统选择。
绑定到特定的本地端口并不能解决任何问题,至少不能解决任何问题。有时,过分热情的网络管理员会错误地认为(a)它增加了安全性并且(b)它很容易实现,从而指定出站端口范围。两者都不正确。
TIME_WAIT 状态不是“操作系统 [需要] 一段时间才能收到通知”,它是 TCP 的一项基本安全功能。关闭的套接字会持续几分钟。除非您绑定到特定的本地出站端口,否则这是一项功能,而不是错误。
【讨论】: