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

shutdown(sock, SHUT_RD);

真的吗?是否只是使所有recv()调用返回错误代码?如果是这样,哪个错误代码?

是否会导致基础TCP连接发送任何数据包?此时对方发送的任何数据会发生什么-是否保留该数据,并且连接的窗口大小一直缩小直到变为0,还是被丢弃,并且窗口大小没有缩小?

最佳答案

关闭套接字的读取端将导致任何阻塞的recv(或类似的)调用返回0(指示正常关闭)。我不知道当前在IP堆栈上传输的数据将如何处理。毫无疑问,它将忽略来自另一方的动态数据。它根本不会影响对该套接字的写入。

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

10-07 19:16
查看更多