barbaputas Wtf ?! | Bonjour à tous.
Je commence mes balbutiements en programmation réseau. Pour le moment, mon client/serveur fonctionne (sous Linux et Windows), cela consiste juste à faire quelque de tres simple en passant du texte du client vers le serveur et du serveur vers le client. Pour le moment tout fonctionne, il me faut maintenant gérer les timeout. Après quelques recherches sur le forum, il semble que select() soit la fonction à utiliser (en plus c'est portable windows/Linux ce qui est parfait pour mes besoins).
Cependant je n'arrive pas à l'utiliser correctement.
Voici le code approximatif du serveur(pour Linux et Win) :
Code :
- socketd = socket (...);
- bind (....);
- listen (...);
- for (;;)
- {
- SockClient=accept(Socketd,....);
- Nblus= read () ou recv ();
- write(...) ou send ();
- divers traitements;
- Close(SockClient);
- }
|
Code du client :
Code :
- Socketd = socket (...);
- connect ();
- send ();
- fd_set set_rcv;
- struct timeval tv;
- FD_ZERO(&set_rcv);
- FD_SET(Socketd, &set_rcv);
- tv.tv_sec = 5; tv.tv_usec = 0; // Timeout 5 sec
-
- while (1)
- {
- FD_ZERO(&set_rcv);
- FD_SET(Socketd, &set_rcv);
- retval = select (0, &set_rcv, NULL,NULL,&tv); //Windows
- // Linux => retval = select (FD_SETSIZE, &set_rcv, NULL,NULL, &tv)
- if (retval > 0)
- {
- NbLus = recv(Socketd, Tampon, sizef(Tampon), 0);
- break; // je veux qu'un seul receive
- }
- }
- if (!retval) { exit; //(on a un timeout)}
|
Le pb c'est que je tombe sur une boucle infinie. Si j'enleve la boucle, je tombe forcement sur un timeout.
Fct : le client envoi un code au serveur, le serveur le recoit et le traite, renvoit la reponse au client. Message édité par barbaputas le 15-03-2005 à 18:04:39
|