recv在客户端套接字关闭时不向我发送-1()
服务器代码recv在客户端套接字关闭时不向我发送-1(),c,linux,sockets,posix,C,Linux,Sockets,Posix,服务器代码 ... client_socket = accept(server_socket, (struct sockaddr *) &client_address, &client_address_len); ... for (;;) { if ( recv(client_socket, recived_buffer, MAX_MSG_LENGTH, 0) < 0 ) { perror("ERROR leyendo el socket")
...
client_socket = accept(server_socket, (struct sockaddr *) &client_address, &client_address_len);
...
for (;;) {
if ( recv(client_socket, recived_buffer, MAX_MSG_LENGTH, 0) < 0 ) {
perror("ERROR leyendo el socket");
exit(1)
}
}
。。。
client\u socket=accept(server\u socket,(struct sockaddr*)和client\u address,以及client\u address\u len);
...
对于(;;){
if(recv(客户端套接字,接收缓冲区,最大消息长度,0)<0){
perror(“leyendo el插座错误”);
出口(1)
}
}
如果我杀死客户端,服务器将无限期地关闭
任何提示?当客户端关闭连接时,服务器端调用将返回值0 从手册页: 返回值 这些调用返回接收的字节数,如果发生错误,则返回-1。对等方执行有序关机后,返回值将为0
还需要注意的是,在有数据可读取之前,调用将被阻塞。如果不想阻塞,则需要确保在呼叫前将套接字设置为非阻塞或使用,或查看是否有传入数据。当客户端关闭连接时,服务器端呼叫将返回值0 从手册页: 返回值 这些调用返回接收的字节数,如果发生错误,则返回-1。对等方执行有序关机后,返回值将为0
还需要注意的是,在有数据可读取之前,调用将被阻塞。如果不想阻塞,则需要确保在调用前将套接字设置为非阻塞或使用,或查看是否有传入数据。recv返回0-当对等方关闭连接时,另一部分将其解释为EOFrecv返回0-当对等方关闭连接时,另一部分将其解释为EOF