运维开发网

网络 – 使用TCP关闭(sock,SHUT_RD)的行为

运维开发网 https://www.qedev.com 2020-05-15 20:01 出处:网络 作者:运维开发网整理
使用TCP套接字时,有什么用呢 shutdown(sock, SHUT_RD); 实际上呢?它是否只是使所有recv()调用返回错误代码?如果是这样,哪个错误代码? 它是否会导致底层TCP连接发送任何数据包?对方在此时发送的任何数据会发生什么 – 它是否保留,并且连接的窗口大小一直在缩小,直到达到0,或者它是否被丢弃,窗口大小不会缩小? 关闭套接字的读取端将导致任何阻塞的recv(或类似)调用返回
使用TCP套接字时,有什么用呢

shutdown(sock, SHUT_RD);

实际上呢?它是否只是使所有recv()调用返回错误代码?如果是这样,哪个错误代码?

它是否会导致底层TCP连接发送任何数据包?对方在此时发送的任何数据会发生什么 – 它是否保留,并且连接的窗口大小一直在缩小,直到达到0,或者它是否被丢弃,窗口大小不会缩小?

关闭套接字的读取端将导致任何阻塞的recv(或类似)调用返回0(表示正常关闭).我不知道当前在IP堆栈上传输的数据会发生什么.它肯定会忽略来自另一方的数据.它根本不会影响对该套接字的写入.

事实上,明智地使用关机是确保您在完成后立即清理的好方法.不使用keepalive的HTTP客户端可以在发送请求后立即关闭写入端,并且看到Connection:关闭的服务器也可以在接收到请求后立即关闭读取端.这将导致任何进一步的错误活动立即显而易见,这在编写协议级代码时非常有用.

0

精彩评论

暂无评论...
验证码 换一张
取 消