cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
6 nov. 2004 à 11:14
cs_Ange44
Messages postés4Date d'inscriptionvendredi 18 novembre 2005StatutMembreDernière intervention 5 septembre 2006
-
5 sept. 2006 à 14:51
Bonjour,
J'ai lu sur msdn et un peu partt ke lon pouvait reconnaitre la deconnexion d'un client si recv renvoyait 0, mais lorsk je fais par exemple ceci :
while (recv(...)) {}
Malgré le fait que le client se soit deconnecté, ca boucle tjrs et ca me renvoie -1 (== SOCKET_ERROR).
Je ferme la connexion du client en faisant appel a closesocket(), ya til une fonction ke j'ai oublié ? J'ai essayé avec shutdown et closesocket(), mais j'ai tjrs le mm pb.
Si kelkun a une solution, merci bcp ;)
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 6 nov. 2004 à 12:44
"If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError."
Donc, appelle shutdown avec SD_BOTH avant ton closesocket. Et teste donc recv > 0, quitte à utiliser une variable temporaire (genre while((i=recv) > 0), çà t'évitera de boucler bêtement si le client plante) pour tester à la sortie de la boucle ce qui s'est passé.
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 7 nov. 2004 à 19:34
Ben,
0 = connexion fermée "amicalement" (avec appel à shutdown avant)
-1 = connexion plantée ou fermée à l'arrache, et WSAGetLastError() te permet d'en savoir plus sur ce qui s'est passé