1

yup smile

Je programme avec CygWin sous XP des sockets non-bloquants et j'ai un problème :

Je place un socket en listen(); et j'insere son FD dans 3 structures fd_set différentes à l'aide de FD_SET(FD,&structure); (et ayant prealablement mis à zéro avec FD_ZERO(&structure); et j'attend une connexion avec select(plus_haut_FD+1,&copie_de_la1ere_structure,&copie_de_la2eme_structure,&copie_de_la3eme_structure,&structure_timeval);

Ainsi, j'attend une connexion et lorsque il y a une tentative de connection, select() renvoie une valeur differente de 0 et avec les fonctions appropriées j'effectue un accept() et insere le nouvel FD dans les 3 structures fd_set citées et je reitere le select() avec une nouvelle copie ( memcpy(); ) de ces structures ayant le nouvel FD du client.

Le problème c'est que je veux faire en sorte d'envoyer des données au nouveau socket client mais je ne peux pas car les SYN/ACK ne sont pas finis et j'obtiens une erreur avec strerror(errno) m'indiquant que la connection n'as pas finie d'etre etablie. Mais ce n'est pas une erreur car elle fonctionne si j'attends par exemple 1s que la connection soit etablie ou que le client envoie des données lorsque la connexion est etablie, et cela meme avec plusieurs sockets clients. la connexion est donc bien etablie si on laisse le temps au SYN & ACK, et synchrone.

Alors, si l'un de vous pourrait m'indiquer comment faire en sorte que select(); se "libere" (j'entends par la que le code continue à sa suite) lorsque le SYN/ACK est fini ? manipulation de flag ou autres.. je sais pas :/

ThX d'avance smile
Vini, vidi, vici !