即使重用地址设置为 true,什么会导致 TCP 套接字抛出“java.net.BindException:地址已在使用中”?仅当应用程序快速重新启动时才会发生这种情况。在 CentOS 5 Linux 操作系统上运行。
这有点解释它:
http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html#bind
有时,你可能会注意到,你尝试
重新运行服务器并且bind()失败,
声称“地址已被使用”。
这意味着什么?嗯,一点点
连接的套接字的位是
仍然徘徊在内核中,
它正在占用端口。你可以
要么等待它清除(一分钟
左右),或者将代码添加到您的程序中
允许它重用端口,例如
这
(提供C代码)
基本上,在 C 语言中,您调用一个名为 setsockopt() 的函数,其中一个参数名为 SO_REUSEADDR,它允许您重用该端口。
我在 google 上找到了一些简短的链接,这些链接应该可以帮助您开始了解如何在 Java 中设置等效选项:
http://java.sun.com/j2se/1.4.2/docs/guide/net/socketOpt.html
http://java.sun.com/j2se/1.4.2/docs/api/java/net/SocketOptions.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)