在Linux上关闭HTTP套接字,然后无法再次打开它

时间:2010-11-12 17:32:40

标签: java linux binding

我们在其中一个客户服务器上遇到问题,其中似乎关闭了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)

关于结束问题,这似乎是代码中的错误。