2009-10-05 9 views

Répondre

5

Utilisez select pour attendre la lecture sur le socket; lorsque le socket est fermé, winsock doit le signaler comme lisible. La réception de la socket vous donnera alors 0 octet, vous indiquant que le socket a été fermé.

+2

Lorsque vous vérifiez la valeur de retour de 'recv' il peut revenir * soit * 0, ce qui signifie que la prise a été fermée avec succès (comme vous le décrivez), ou' SOCKET_ERROR' qui vous indique la prise n'a pas été fermée proprement (par exemple timeout) ou une erreur s'est produite de votre côté. Les deux conditions doivent être vérifiées afin d'attraper tous les cas où la connexion est fermée. – GRB

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 
} 
Questions connexes