IPB

Bienvenue invité ( Connexion | Inscription )

> Programmation

Il est interdit de poster directement à la racine de ce forum.
Veuillez créer votre topic dans le sous-forum approprié.

 
Reply to this topicStart new topic
> C'est quoi ce bordel!, select sur un socket bsd
Options
protheus
posté 22 Jul 2004, 22:44
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 71
Inscrit : 10 Sep 2001
Lieu : Paris
Membre no 768



Je ne comprend pas,ds le code suivant :

CODE

do
{
 //Boulce de reception.
 FD_ZERO(&readfds);
 if(sock >= 0)
 {
  FD_SET(sock, &readfds);
 }
 nfds = sock +1;
 timeout.tv_sec = 5;   // 5 secondes
 timeout.tv_usec = 500000; // 0.5 secondes
 int z = 0;
 
 do
 {
  openlog("SibFunct",LOG_PID | LOG_CONS, LOG_USER);
  syslog(LOG_ERR,"Selection sur n° %d",sock);
  z = select(nfds,&readfds ,NULL, NULL, &timeout);
  syslog(LOG_ERR,"Resultat de la selection sur n° %d , nb de déscritpeur(s) prés : %d",sock,z);
 }while(z == -1 && errno ==EINTR && !FD_ISSET(sock,&readfds));
 if(z == -1)
 {
  openlog("SibFunct",LOG_PID | LOG_CONS, LOG_USER);
  syslog(LOG_ERR,"Erreur sur la disponibilitée du socket n° %d",sock);
  closelog();
  close(sock);
  exit(-1);
 }
 
 if(z == 0)
 {
  syslog(LOG_ERR,"Sortie de la boucle de lecture sur le socket n° %d",sock);
  closelog();
  close(sock);
  exit(0);
 }
.... traitements divers et avariés

}while(sock >= 0);
return;


Le socket devrait se mettre en attente lorsque le tampon de lecture est vide, sauf que lorsque cela arrive, l'utilisation CPU s'embale et il boucle indéfiniment sur une selection.... j'ai beau vider le tampon, c'est comme s'il rester tt le temps 1 octet !!!

QQun à une idée?


--------------------
1 BSD Box ;-) Free 5.2.1
1 Alu 15" 1.5
2 IBM T20 700/256/16
1 Cadavre de Silicon Graphics VW320 2*500/256/120Go
et des poussieres...
Go to the top of the page
 
+Quote Post
buserror
posté 22 Jul 2004, 23:41
Message #2


Macbidouilleur d'Or !
*****

Groupe : Banned
Messages : 1 559
Inscrit : 19 May 2002
Lieu : Gone
Membre no 2 507



Il faut que tu geres le cas ou la lecture a l'air valide, mais le nombre d'octet retourne est ZERO; c'est un signal comme quoi la connection a étée coupée, et il faut fermer la socket a ce moment la, sinon ton select() va boucler sans fin.

Ton code est correct ceci dit, -1 est typiquement EINTR, 0 est typiquement le timeout, mais mon nez me dit que tu ne geres pas la detection de déconnection.



--------------------
Manual Focus Forum pour les fans d'appareils & objectifs a papa...
Go to the top of the page
 
+Quote Post
cbrandt
posté 23 Jul 2004, 09:29
Message #3


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 291
Inscrit : 29 May 2004
Lieu : 48°50'27" N, 2°13'43" E
Membre no 19 336



tout sur les sockets :

http://www.developerweb.net/forum/

Ce message a été modifié par cbrandt - 23 Jul 2004, 09:29.


--------------------
Membre no. 14 du club des AIPBP (Anciens Inscrits Pas Beaucoup de Posts) Voir la liste
Go to the top of the page
 
+Quote Post
protheus
posté 23 Jul 2004, 10:08
Message #4


Adepte de Macbidouille
*

Groupe : Membres
Messages : 71
Inscrit : 10 Sep 2001
Lieu : Paris
Membre no 768



QUOTE
Ton code est correct ceci dit, -1 est typiquement EINTR, 0 est typiquement le timeout, mais mon nez me dit que tu ne geres pas la detection de déconnection.


Benh pourtant si, et de tout façons le "bouclage" infinie (l'inifite loop quoi ;-) ) ce produit alors que la connection est maintenue , entre deux ordres envoyés par le client par exemple.

zarb...

merci qd même.


--------------------
1 BSD Box ;-) Free 5.2.1
1 Alu 15" 1.5
2 IBM T20 700/256/16
1 Cadavre de Silicon Graphics VW320 2*500/256/120Go
et des poussieres...
Go to the top of the page
 
+Quote Post
buserror
posté 23 Jul 2004, 11:07
Message #5


Macbidouilleur d'Or !
*****

Groupe : Banned
Messages : 1 559
Inscrit : 19 May 2002
Lieu : Gone
Membre no 2 507



Dans ce cas c'est parce que tu lis pas tout ce qui est dispo dans le buffer. Si tu fais ca select va retourner immediatement avec le meme flag. select() ne renvoie pas des *evenements* il renvoie des *status* sur les sockets.


--------------------
Manual Focus Forum pour les fans d'appareils & objectifs a papa...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 29th March 2024 - 06:39