gpt4 book ai didi

networking - shutdown(sock, SHUT_RD) 与 TCP 的行为

转载 作者:可可西里 更新时间:2023-11-01 02:30:26 27 4
gpt4 key购买 nike

当使用 TCP 套接字时,有什么作用

shutdown(sock, SHUT_RD);

实际上呢?它只是让所有 recv() 调用返回一个错误代码吗?如果是,是哪个错误代码?

它会导致底层 TCP 连接发送任何数据包吗?另一方此时发送的任何数据会发生什么情况 - 它是否保留,并且连接的窗口大小一直缩小直到它变为 0,或者它只是被丢弃,窗口大小不缩小?

最佳答案

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

事实上,明智地使用shutdown 是确保您在完成后立即清理的好方法。不使用 keepalive 的 HTTP 客户端可以在发送完请求后立即关闭写入端,而看到 Connection: closed 的服务器同样可以尽快关闭读取端它已完成接收请求。这将导致任何进一步的错误事件立即显而易见,这在编写协议(protocol)级代码时非常有用。

关于networking - shutdown(sock, SHUT_RD) 与 TCP 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/740817/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com