gpt4 book ai didi

java - 即使应用程序崩溃后,IPV6 ServerSocket 仍在监听

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:48 26 4
gpt4 key购买 nike

我使用以下方法创建了一个 ServerSocket:

InetSocketAddress inetsktaddr = new InetSocketAddress(0);
ServerSocket sckt = new ServerSocket();
sckt.bind(inetsktaddr);
Socket socket = sckt.accept();

当应用程序运行时,使用我发现的 netstat,

TCP    0.0.0.0:49906          0.0.0.0:0              LISTENING       9196
TCP [::]:49906 [::]:0 LISTENING 9196

有时当应用程序崩溃时,netstat 结果显示:

TCP    [::]:49906             [::]:0                 LISTENING       9196

当搜索进程ID 9196时,没有这样的进程存在。这是应用程序运行时的java.exe进程ID。出现这种情况的原因是什么?

我使用的是 java 1.5 和 Windows 7 Professional

编辑

过了一段时间我发现了以下内容:我的应用程序启动 mysql 数据库。有时java.exe崩溃时,mysql不会崩溃。数据库服务器将仅启动。当这个问题出现时(::单独处于监听状态),我杀死了mysql进程,::socket立即停止监听。所以mysql以某种方式阻止::在java崩溃时消失。找不到原因。

最佳答案

终于找到原因了,是JVM的Bug。 (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6598160)

子进程将仅继承 IPV6 套接字句柄,而不继承 IPV4 套接字句柄。因此这个问题就出现在我身上。

修复的是我应该升级 JVM 或仅在 ipv4 服务器套接字中监听。

关于java - 即使应用程序崩溃后,IPV6 ServerSocket 仍在监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888395/

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