我们在其中一个客户服务器上遇到问题,其中似乎关闭了java应用程序HTTP套接字,并且之后暂时不打开它。
意思是这样的:
1)应用程序工作正常,然后导致套接字关闭的东西。
2)任何后续尝试打开它,包括应用程序重启都会产生“java.net.BindException:Address in in use”一段时间。
3)然后它最终将通过另一个应用程序重启打开套接字。
这是我们第一次看到这样的问题发生,而且非常偶然。
对任何人都响铃吗?
OS:2.6.18-194.el5#1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64,CentOS 5.5版
Java版本:1.6.0_20
谢谢!
4 个答案:
答案 0 :(得分:2)
似乎你应该告诉你的Linux创建允许立即重新绑定的套接字,请参阅SO_REUSEADDR
中的man 7 socket
。
答案 1 :(得分:0)
答案 2 :(得分:0)
关于什么是关闭套接字,你必须调查你的代码。
,它不是关闭套接字的外部东西
当您尝试再次绑定到该套接字时看到的行为是正常的和预期的,并且有一些解释为什么here。
您可以设置SO_REUSEADDR套接字选项以告知系统继续并允许程序绑定到该端口。对于java,请参阅here
答案 3 :(得分:-1)
在套接字的所有排队消息都已成功发送或已达到延迟超时之前,您无法立即重新绑定套接字。您可以使用SO_LINGER
更改此政策。
可以找到更多信息here(联机帮助页)和here(javadoc)
关于结束问题,这似乎是代码中的错误。