JoebarGlut
Messages postés111Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention17 octobre 2007
-
2 mars 2006 à 02:15
JoebarGlut
Messages postés111Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention17 octobre 2007
-
2 mars 2006 à 12:47
Salut,
Je m'esseye aux socket non bloquante en api win32 mais je bloque sur un point.
Pour mon serveur, mon WSAAsyncSelect fonctionne mais pour le client il y a quelque chose que je n'ai pas compris :
Entre le socket() et le connect() je fais ça :
WSAAsyncSelect(sock_client, hwnd, WM_SOCKET, FD_CONNECT | FD_CLOSE | FD_READ | FD_WRITE);
Si je le commente, mon connect() deviens bloquant mais se connecte impecablement au serveur.
Le truc c'est que j'aimerais passer par du non_bloquant pour gerer les FD_READ, FD_WRITE et FD_CLOSE sans passer par du thread.
Mais lorsque je décommente le WSAAsyncSelect, le connect() ne fonctionne plus. J'ai lu quelquepart que c'est parce qu'il n'as pas le temps de se connecter. J'ai alors esseyé de le mettre dans un while(!OK) avec FD_CONNECT: OK = 1 ; mais il ne se connecte toujours pas.
Que faire pour que mon connect() fonctionne ?
merci
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 2 mars 2006 à 09:50
Salut,
Avec le WSAAsyncSelect(), connect() va échouer avec l'erreur
WSAEWOULDBLOCK (ce qui est normal puisqu'il est bloquant), et lorsque
la connection sera établie, tu recevra l'event FD_CONNECT.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 2 mars 2006 à 12:32
Salut,
Lorsque connect retourne SOCKET_ERROR il faut appeler
WSAGetLastError(), et si WSAGetLastError() != WSAEWOULDBLOCK,
alors tu es sur qu'il y a une vrai erreur.
Ensuite, le FD_CONNECT est toujours envoyé, et pour savoir si
l'operation a reussi ou pas, il faut regarder le numéro de l'erreur qui
se trouve dans HIWORD(lParam) a la reception du message.
JoebarGlut
Messages postés111Date d'inscriptionmercredi 13 août 2003StatutMembreDernière intervention17 octobre 2007 2 mars 2006 à 12:14
Ah ok !!! Je ne m'attendais pas à ce que cette erreur soit normale et j'avais un exit(-1) dans mon traitement d'erreur de la connect() alors forcément :D
C'est bizare comme truc, ils auraient pu retourner une socket speciale qui voudrais dire que le connect() a fonctionné mais qu'il est non bloquant du genre 65535 parceque la on a l'impression que le connect a échoué.
Merci !!
Bon maintenant par contre il m'envois FD_CONNECT meme quand y'a pas de serveur mais j'ai pas encore cherché... je verrai ça lundi !
Vous n’avez pas trouvé la réponse que vous recherchez ?