2009-10-05 48 views

回答

5

使用select等待讀取套接字;當套接字關閉時,winsock應該報告它是可讀的。然後從套接字接收將給你0字節,告訴你套接字已關閉。

+2

當您檢查返回值'recv'它可以返回*要麼* 0,這意味着插座被成功關閉(如你描述),或'SOCKET_ERROR'它告訴你套接字沒有關閉乾淨(例如超時)或您的一方出現錯誤。必須檢查兩個條件才能捕獲連接關閉的所有情況。 – GRB 2009-10-05 21:59:52

0
int received_bytes = recv(_socket, buffer, sizeof(buffer)-1,0); 
if(received_bytes > 0) 
{ 
    //data received 
} 
else if (received_bytes == 0) 
{ 
    //connection closed 
} 

else 
{ 
    //wait for more data 
}