je ne sort pas de la boucle de recv() dans mon client - C - Programmation
Marsh Posté le 17-03-2004 à 17:31:03
recv est bloquant, donc si il n'y a rien à lire sur ton socket il bloquera indefiniment.
Pour savoir si il y a qq chose à lire sur ton socket il faut que tu utilise select (ou poll)
Marsh Posté le 17-03-2004 à 19:02:16
essebi_o a écrit : |
Marsh Posté le 17-03-2004 à 19:44:02
Code :
|
Marsh Posté le 18-03-2004 à 12:26:59
la methode de BlackGoddess je l'ai déjà essayé ... helas .. sans succes
Par contre quand tu parles de select, pospos, tu l'intègres dans une boucle while à la place de recv ?
Marsh Posté le 18-03-2004 à 13:46:09
regarde le man de select
Select va te dire quels sockets sont actfis en lecture (ou en ecriture/exeption si tu lui a demandé).
donc l'idée c'est de renseigner le select avec le numero de ton socket dans la partie "read", puis lancer le select en attente jsuqu'a ce qu'il retourne. Cela voudra soit dire que le timeout est ecoulé (et dans ce cas tu peut rafraichir ton affichage ou tout autre chose, puis retourner dans le select), stoi que ton soket a qqchose à dire et donc dans ce cas tu peux faire ton recv.
En gros avant CHAQUE recv il faut que tu fasse un select pour savoir si il y a effectivement qq chose à lire, sinon recv va bloquer
Marsh Posté le 18-03-2004 à 13:48:54
OK, un super MERCI pour l'explication !!
je vais faire ça ..
Marsh Posté le 29-03-2004 à 12:21:38
UN ENORME MERCI A POSPOS
ça fonctionne à merveille avec select()
merci encore
Marsh Posté le 17-03-2004 à 10:52:52
bonjour à tout le monde
j'ai decidé de faire un appel désésperé car ça fait 10 jours que je suis dans une impasse et je sens bien que je ne vais plus m'en tirer ...
ceci est la boucle recv() de laquelle je ne sort jamais ...
************************************************************
while(1) {
if(recv(sd,buff,1024,0)>0) {
printf(buff);
bzero(buff,1024);}
break;
}
**************************************************************
Le but est de pouvoir afficher la réponse du serveur et de pouvoir par la suite rentrer une nouvelle requete, et ceci indefinitivement ...
MERCI POUR TOUT AIDE