是否可以在客户端和服务器端都关闭Java套接字?

发布于 2021-01-30 16:17:53

我在两个Java应用程序之间建立了一个套接字TCP连接。当一侧关闭插槽时,另一侧保持打开状态。但我希望将其关闭。而且我也迫不及待想看看它是否可用,然后关闭它。我想要某种方式从一侧完全关闭它。我能做什么?

关注者
0
被浏览
119
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    TCP不能像这样工作。操作系统将不会释放资源,即文件描述符以及端口,直到应用程序显式关闭套接字或死掉,即使TCP堆栈知道另一端已将其关闭。从对等方收到FIN后,从内核到用户应用程序之间没有回调。操作系统向另一侧确认它,但close()在发送FIN数据包之前等待应用程序调用。看一下TCP状态转换图 -您处于 被动关闭 框中。

    在不为每个套接字专用线程的情况下检测这种情况的一种方法是使用select/poll/epoll/kqueue函数系列。被动关闭的套接字将被发信号表示为可读,并且尝试读取将返回EOF。

    希望这可以帮助。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看