Problème WinSock...

Résolu
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006 - 28 avril 2006 à 11:35
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006 - 28 avril 2006 à 11:45
Bonjour tout le monde, j'ai une réaction étrange de WinSock, et comme je trouve pas j'ai pensé que quelqu'un avait déjà eu ce problème ( c'est la première fois dans mon cas ).
Voilà, alors j'ai un client et un serveur qui dialogues ensemblent. Le client a une interface graphique, et socket asynchrone avec WSAASyncSelect. Le serveur n'en a pas, donc j'utilise WSAEventSelect.
Au niveau de la gestion asynchrone tout à l'air de bien se passer, jusqu'au moment où j'envoi des données depuis le client au serveur.
Le serveur les reçois ( aucun soucis ici encore ), puis il répond. Et déjà là, c'est assé étrange. Le client reçois le message de données arrivées, il commence à recevoir ( le serveur fait plusieurs sends, ce sont des paquets clos à chaque fois, envoyé d'un bloc et d'une taille de 8 à 20 octets ) 1 ou 2 paquets ( ça dépend des fois ), des fois même il reçoit la moitié des paquets ( c'est une boucle qui tente de récupérer un maximum de paquets disponibles ). Je lis en 2 fois. D'abord 4 octets qui sont la taille totale du paquet, puis je reçois la suite de paquet ( maintenant que je connais la taille XD ). La boucle se termine, tous les paquets n'ont pas été récupérés. Et alors là, le client continu de recevoir plusieurs messages de données arrives ( lParam = FD_READ ), mais les recv ne lisent pas ( WSAWOULDBLOCK ), donc il n'y pas de données. Etrange.... Le nombre de messages total ne correspond pas au nombre de paquets envoyés. Au bout d'un moment, avec ses 18 ou 20 paquets reçus, il a fini de recevoir les paquets envoyés par le serveur.
Et à ce moment là, il reçoit un message de socket fermée ainsi que le serveur de son côté. On dirait que la connection est fermée par le système, ou quelque chose dans le genre, mais je comprend pas pourquoi. Aucun appel à closesocket de chaque côté.
La seule chose qui peut faire ça, c'est le multiples appels à recv qui ratent par manque de données ( WSAWOULDBLOCK ).

Voilà, j'espère que je suis compréhensible, si vous avez une petite aide, elle sera la bienvenue, parce que là je sais pas comment corriger ce problème...

@+
Vermi

1 réponse

cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006
28 avril 2006 à 11:45
Arf, en fait le problème est résolu, c'était une erreur de ma part. J'ai ajouté une WSAResetEvent et ( normalement mon event est valable que pour FD_READ et FD_CLOSE alors j'avais fais "if (FD_READ) else ...", j'ai ajouté : "elseif (FD_READ)" et ça marche tout de suite beacoup mieux. XD

@+
Vermi
3
Rejoignez-nous