TCP不能像这样工作。 *** 作系统将不会释放资源,即文件描述符以及端口,直到应用程序显式关闭套接字或死掉,即使TCP堆栈知道另一端已将其关闭。从对等方收到FIN后,从内核到用户应用程序之间没有回调。 *** 作系统向另一侧确认它,但
close()在发送FIN数据包之前等待应用程序调用。看一下TCP状态转换图 -您处于 被动关闭 框中。
在不为每个套接字专用线程的情况下检测这种情况的一种方法是使用
select/poll/epoll/kqueue函数系列。被动关闭的套接字将被发信号表示为可读,并且尝试读取将返回EOF。
希望这可以帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)