所以让我简化我正在处理的代码:
int fd = socket(...);
int client = accept(fd, ...);
while (true) {
int bytes_read = recv(client, ...);
if (bytes_read == 0) {
break;
}
};
Run Code Online (Sandbox Code Playgroud)
此时我已经知道客户端已断开连接(recv返回0).但我还是要打电话
close(client);
Run Code Online (Sandbox Code Playgroud)
?
是.
当你recv()0字节时,这是内核让你知道远程主机已关闭其连接发送端的方式.它们可能仍然打开套接字并且可以接收您发送的更多数据(但不能回复).
当您调用close()TCP套接字时,您正在做两件事: