gpt4 book ai didi

Java 服务器未释放连接锁

转载 作者:行者123 更新时间:2023-12-01 14:48:29 25 4
gpt4 key购买 nike

我有一个与 jbu's bind errors in Java 非常相似的问题.

不同之处在于,我的服务器全天打开一个流来接受连接,然后我有一个脚本在早上硬终止服务,等待 10 秒,然后重新启动服务以接受连接。大多数情况下,它可以工作,但有时,该服务在尝试启动时会遇到 BindExceptions。我想不出在程序中的流被外部脚本硬杀死之前关闭程序中的流的好方法,所以我想知道释放端口上的锁的好方法是什么,无论是外部的,还是如果我应重新构 build 计,以便服务自行终止,但确保在此之前关闭所有连接。 (我在计算机上运行 Windows Server 2008。)

最佳答案

当 TCP 连接关闭时,连接可能会在连接关闭后的一段时间内保持超时状态(通常称为 TIME_WAIT 状态或 2MSL 等待状态)。对于使用众所周知的套接字地址或端口的应用程序,如果存在涉及套接字地址或端口的超时状态连接,则可能无法将套接字绑定(bind)到所需的 SocketAddress。
这就是为什么您注意到有时即使您等待了 10 秒,服务也会遇到 BindExceptions。

在使用bind(SocketAddress)绑定(bind)套接字之前启用SO_REUSEADDR,即使先前的连接处于超时状态,也可以绑定(bind)套接字。这可以通过以下方式实现:

ServerSocket.setReuseAddress(true)在绑定(bind)套接字之前。
这强制或传达操作系统重用相同的地址,即使它已经显示为绑定(bind)...

关于Java 服务器未释放连接锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com