首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忘记关闭ServerSocket

忘记关闭ServerSocket
EN

Stack Overflow用户
提问于 2010-12-30 03:24:10
回答 7查看 3.4K关注 0票数 2

如果我的程序在终止之前没有执行ServerSocket.close()和/或Socket.close(),那么下次我启动该程序时,当我试图开始侦听端口时,它将总是抛出一个IOException

这通常不是因为我忘记在程序的末尾放置一个close(),而是因为我强制关闭了程序,并且永远没有机会执行close()。似乎我必须在我的Linux机器上注销和登录,它才能摆脱“被占用的套接字”。我想知道是否有人知道一种方法,我可以清除任何未关闭的套接字,以防服务器从终端或任何其他方法强制结束?

我已经尝试禁用和启用我的网络连接,仍然没有成功。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-12-30 20:05:11

与你的想法相反,你并没有终止你的计划。如果是这样,套接字就会被释放,我不相信您在这里发现了linux内核中的bug :)。

您的主线程可能已经终止,但您的应用程序仍有非守护进程线程在运行,这将使您的JVM保持活动状态。

创建线程后,您必须调用myThread.setDaemon(true)。

票数 5
EN

Stack Overflow用户

发布于 2010-12-30 03:51:13

在绑定之前,你会在ServerSocket上调用[setReuseAddress()][1]吗?如果不是,那就试试吧。

票数 0
EN

Stack Overflow用户

发布于 2010-12-30 04:35:25

使用"netstat -a“命令检查该端口的状态。我怀疑它将在近距离等待。这是一个TCP按设计工作的案例,并将在任何语言和操作系统中显示。最终,内核将在等待您的程序关闭套接字并将其清除时超时。您可以减少此超时,但最好的解决方案是确保您的程序干净地关闭。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4557144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档