Recv() bloquant!! select??

dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 30 mai 2004 à 17:57
cs_Thaeron Messages postés 202 Date d'inscription vendredi 6 juillet 2001 Statut Membre Dernière intervention 31 octobre 2007 - 1 juin 2004 à 11:50
bonjour,

je commence la programmation reseau en utilisant les sockets et je me heurte a qques problemes:

je me suis rendu compte que la fonction recv(..) est bloquante si bien que le serveur ne peut qu'attendre qu'on lui envoie un message et ne peut donc pas en envoyer en meme tps.

J'ai entendu parler de la fonction select() mais je ne vois pas ce qu'elle fait et surtout comment m'en servir! Les infos la dessus sont plutot floues.

QQ1 peut-il m'eclairer la dessus??

Je veux seulement connaitre les parametres de select.

Merci.

1 réponse

cs_Thaeron Messages postés 202 Date d'inscription vendredi 6 juillet 2001 Statut Membre Dernière intervention 31 octobre 2007
1 juin 2004 à 11:50
Salut, pour passer ton problème il ya plusieurs solutions: un thread, select ou alors rendre recv non bloquant (en réalité c'est pas recv qui est bloquant mais ton socket).
Je vais expliquer comment rendre ton socket non bloquant:
Pour le rendre non bloquant ya 2 codes possibles, selon si t'es sous windoz ou sous Linux:

Code windoz:
int
set_nonblocking (int socket)
{
u_long arg = 1;
ioctlsocket (socket, FIONBIO, &arg);
if (arg == 0)
return FALSE;
return TRUE;
}

Code Linux:
void
set_nonblocking (int socket)
{
fcntl(socket, F_SETFL, O_NONBLOCK);
}

Petite précision: faut rendre le socket non bloquant une fois qu'il est connecté (donc apres connect ou accept).

Pour le select regarde le source du squellette de mon server, j'utilise un select et le source est commenté: http://www.cppfrance.com/code.aspx?ID=1114

? Pouf pouf dis le magicien ?
0
Rejoignez-nous