使用tcp关闭(SOCK,SHUT_RD)的行为 [英] Behavior of shutdown(sock, SHUT_RD) with TCP

查看:0
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆