Java 即使在应用程序崩溃后,IPV6 ServerSocket仍在侦听
我使用以下方法创建了一个ServerSocket:Java 即使在应用程序崩溃后,IPV6 ServerSocket仍在侦听,java,sockets,ipv6,serversocket,netstat,Java,Sockets,Ipv6,Serversocket,Netstat,我使用以下方法创建了一个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
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。发生这种情况的原因是什么
我正在使用Java1.5和Windows7 Professional
编辑
过了一段时间,我发现:
我的应用程序启动mysql数据库。有时当java.exe崩溃时,mysql不会崩溃。数据库服务器将仅启动。当这个问题出现时::独自处于侦听状态,我立即终止了mysql进程,该::套接字停止了侦听。所以mysql在某种程度上阻止了::在java崩溃时消失。无法找到原因。至少我找到了原因,这是一个JVM错误 子进程将只继承IPV6套接字句柄,而不继承IPV4套接字句柄。于是我想到了这个问题
修复方法是我应该升级JVM或者只在ipv4服务器套接字中侦听。这里发现了类似的问题。你可能会对此有所了解。Java1.5?那已经过时很多年了。尝试使用当前支持的Java版本。原因是子进程继承了套接字。您好@EJP,子进程mysql不会继承ipv4吗?ipv6服务器套接字仅在侦听。有什么原因吗?