如果我的程序在终止之前没有执行ServerSocket.close()和/或Socket.close(),那么下次我启动该程序时,当我试图开始侦听端口时,它将总是抛出一个IOException。
这通常不是因为我忘记在程序的末尾放置一个close(),而是因为我强制关闭了程序,并且永远没有机会执行close()。似乎我必须在我的Linux机器上注销和登录,它才能摆脱“被占用的套接字”。我想知道是否有人知道一种方法,我可以清除任何未关闭的套接字,以防服务器从终端或任何其他方法强制结束?
我已经尝试禁用和启用我的网络连接,仍然没有成功。
发布于 2010-12-30 20:05:11
与你的想法相反,你并没有终止你的计划。如果是这样,套接字就会被释放,我不相信您在这里发现了linux内核中的bug :)。
您的主线程可能已经终止,但您的应用程序仍有非守护进程线程在运行,这将使您的JVM保持活动状态。
创建线程后,您必须调用myThread.setDaemon(true)。
发布于 2010-12-30 03:51:13
在绑定之前,你会在ServerSocket上调用[setReuseAddress()][1]吗?如果不是,那就试试吧。
发布于 2010-12-30 04:35:25
使用"netstat -a“命令检查该端口的状态。我怀疑它将在近距离等待。这是一个TCP按设计工作的案例,并将在任何语言和操作系统中显示。最终,内核将在等待您的程序关闭套接字并将其清除时超时。您可以减少此超时,但最好的解决方案是确保您的程序干净地关闭。
https://stackoverflow.com/questions/4557144
复制相似问题