!recv ou SOCKET_ERROR

Résolu
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 6 nov. 2004 à 11:14
cs_Ange44 Messages postés 4 Date d'inscription vendredi 18 novembre 2005 Statut Membre Derniè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 ;)

Merci d'avance

++

6 réponses

cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
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é.
3
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
6 nov. 2004 à 18:46
le plus simple pour savoir quand un client se déconnect est d'attendre le FD_CLOSE
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
6 nov. 2004 à 19:54
Salut,
Oui, mais pour le recevoir ce FD_CLOSE il faut utiliser un modele un peu plus évolué..
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 nov. 2004 à 18:57
Merci Nebula, mais alors pkoi recv ne me renvoie pas 0 ? Paske le client a planté ? J'ai po bien compris la..

Merci encore a tous

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
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é
0
cs_Ange44 Messages postés 4 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 5 septembre 2006
5 sept. 2006 à 14:51
J'envoie un message un bon moment après la fin du post mais bon j'essaye quand même ...

l'équivalent du WSAGetLastError() sous Linux c'est quoi ? Parce que je voudrais moi aussi connaitre la déconnexion brutale, mais sous linux ...
0
Rejoignez-nous