2011-04-04 63 views
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 ...

任何提示?

回答

11

當客戶端關閉連接,服務器端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

2

的recv返回0 - 當對等關閉連接,另一部分將其解釋爲一個EOF

相關問題