shutdown(sock, SHUT_RD);
实际上呢?它是否只是使所有recv()调用返回错误代码?如果是这样,哪个错误代码?
它是否会导致底层TCP连接发送任何数据包?对方在此时发送的任何数据会发生什么 – 它是否保留,并且连接的窗口大小一直在缩小,直到达到0,或者它是否被丢弃,窗口大小不会缩小?
关闭套接字的读取端将导致任何阻塞的recv(或类似)调用返回0(表示正常关闭).我不知道当前在IP堆栈上传输的数据会发生什么.它肯定会忽略来自另一方的数据.它根本不会影响对该套接字的写入.事实上,明智地使用关机是确保您在完成后立即清理的好方法.不使用keepalive的HTTP客户端可以在发送请求后立即关闭写入端,并且看到Connection:关闭的服务器也可以在接收到请求后立即关闭读取端.这将导致任何进一步的错误活动立即显而易见,这在编写协议级代码时非常有用.
精彩评论