recv non bloquant en progra socket (connected)

recv non bloquant en progra socket (connected) - C - Programmation

Marsh Posté le 10-03-2004 à 17:44:50    

Bonjour,
 
Voila l'idee : je connecte deux sockets ensemble, d'un cote je fais des send, de l'autre des receive. J'ai plusieur thread qui font des sends sur le meme socket et une thread qui fait son recv. Mon probleme c'est que le receive ne bloque pas : il me signale que je recoit en permanence des messages vides tant qu'il n'y a pas de message entrant. Je ne comprends pas pourquoi car je n'ai pas de client mort comme c'est le cas d'habitude. Vous avez une idee ? Pour l'instant je fait un sleep de 1 seconde avant de verifier s'il y a vraiment un message arrive pour rafraichir. Vous avez d'autres idees ?
Merci


---------------
/* Toblerone is so gooooood 4 U */
Reply

Marsh Posté le 10-03-2004 à 17:44:50   

Reply

Marsh Posté le 10-03-2004 à 17:48:21    

Xinoef a écrit :

Bonjour,
 
Voila l'idee : je connecte deux sockets ensemble, d'un cote je fais des send, de l'autre des receive. J'ai plusieur thread qui font des sends sur le meme socket et une thread qui fait son recv. Mon probleme c'est que le receive ne bloque pas : il me signale que je recoit en permanence des messages vides tant qu'il n'y a pas de message entrant. Je ne comprends pas pourquoi car je n'ai pas de client mort comme c'est le cas d'habitude. Vous avez une idee ? Pour l'instant je fait un sleep de 1 seconde avant de verifier s'il y a vraiment un message arrive pour rafraichir. Vous avez d'autres idees ?
Merci


 
select est votre amie.

Reply

Marsh Posté le 10-03-2004 à 17:50:44    

A moins que ce soit setsockopt ou quelque chose de ce goût-là (je ne me souviens plus du comportement de select et du timeout sur une socket non-bloquante).

Reply

Marsh Posté le 10-03-2004 à 18:12:40    

J'ai essaye un setsockopt( SOL_SOCKET, SO_RCVLOWAT ) mais ca ne marche pas... Il me recoit toujours des messages de 0 char.
Je vais essayer de voir avec select...


---------------
/* Toblerone is so gooooood 4 U */
Reply

Marsh Posté le 10-03-2004 à 18:33:32    

Ca marche pas non plus avec select...
J'avais bon espoir avec setsockopt mais je comprends pas... Meme avec ca ca fouarre...


---------------
/* Toblerone is so gooooood 4 U */
Reply

Marsh Posté le 10-03-2004 à 18:39:03    

Heuuu... petit detail :
Je fais ca :
 
int on=1 ;
if (setsockopt(new_status->intern_socket_rcv, SOL_SOCKET, SO_RCVLOWAT, &on, sizeof(on))<0) {perror("sd with SO_RCVLOWAT" );}
 
Il me fait ca : "sd with SO_RCVLOWAT: Invalid argument"
 
???


---------------
/* Toblerone is so gooooood 4 U */
Reply

Marsh Posté le 10-03-2004 à 18:42:35    

Xinoef a écrit :

Heuuu... petit detail :
Je fais ca :
 
int on=1 ;
if (setsockopt(new_status->intern_socket_rcv, SOL_SOCKET, SO_RCVLOWAT, &on, sizeof(on))<0) {perror("sd with SO_RCVLOWAT" );}
 
Il me fait ca : "sd with SO_RCVLOWAT: Invalid argument"
 
???


 
Mais pourquoi faites-vous ça?
 
Quant à listen, cette fonction permet de savoir s'il y a du data en attente ou si l'on peut écrire sur la socket.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed