的recv不给我一个-1客户端套接字关闭()

的recv不给我一个-1客户端套接字关闭()

问题描述:

服务器代码的recv不给我一个-1客户端套接字关闭()

... 
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) 
    } 
} 

,如果我杀了无限客户端服务器lopps ...

任何提示?

当客户端关闭连接,服务器端recv()通话将返回0。

值从recv(2)手册页:

返回值

这些调用返回的数量收到的字节数,如果发生错误,则为-1。当对等体执行有序关闭时,返回值将为0。


它也可能是重要的注意,recv()调用将阻塞,直到有可供读取的数据。如果您不想阻止,则需要确保将套接字设置为非阻塞或在调用recv()之前使用select()poll()来查看是否有传入数据。

+3

这样,答案是,阅读手册。 :-) – tristan 2011-04-04 16:06:28

+1

*精美*手册! – 2011-05-11 18:41:28

的recv返回0 - 当对等关闭连接,另一部分将其解释为一个EOF