使用tcp关闭(SOCK,SHUT_RD)的行为 [英] Behavior of shutdown(sock, SHUT_RD) with TCP
本文介绍了使用tcp关闭(SOCK,SHUT_RD)的行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用TCP套接字时,
shutdown(sock, SHUT_RD);
真的是这样吗?它只是让所有recv()
调用返回错误代码吗?如果是,错误代码是什么?
它是否会导致底层的TCP连接发送任何数据包?此时另一端发送的任何数据会发生什么情况-是保留它,并且连接的窗口大小一直缩小到0,还是只是丢弃它,而窗口大小不会缩小?
推荐答案
关闭套接字的读取端将导致任何被阻止的recv
(或类似)调用返回0
(表示正常关闭)。我不知道当前沿IP堆栈向上传输的数据会发生什么情况。它肯定会忽略从另一边传来的数据。它根本不会影响对套接字写入。
事实上,明智地使用shutdown
是确保您在完成后立即进行清理的好方法。不使用KeepAlive的HTTP客户端可以在完成发送请求后立即关闭写端,而看到Connection: closed
的服务器也可以在完成接收请求后立即关闭读端。这将导致任何进一步的错误活动立即变得明显,这在编写协议级代码时非常有用。
这篇关于使用tcp关闭(SOCK,SHUT_RD)的行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文