Socket: recv + timeout ???

Signaler
Messages postés
40
Date d'inscription
samedi 14 décembre 2002
Statut
Membre
Dernière intervention
5 juillet 2007
-
cs_amine2004
Messages postés
1
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
10 janvier 2006
-
Salut tt le monde, En fait mon probleme, c'est que je voudrais utiliser un timeout avec la fonction recv. Est ce qu'il ya une fonction similaire qui propose cette fonction, ou un moyen detecter si il y a un message disponible sur mon socket???
Merci. Oliverman

3 réponses

Messages postés
114
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
5 avril 2012
1
salut,

d'après la doc microsoft, si ta fonction recv retourne une valeur de type int, tu peux la comparer à WSAETIMEDOUT si je ne me trompe pas... pour régler ce temps ou même connaitre sa valeur, j'en ai aucune idée

6co
Messages postés
9
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
10 juillet 2008

moi je programme des socket sous linux, toi tu ne l'as pas preciser mais bon bref daprés ce ke jai vu il n'ya pas une difference enorme dans la syntaxe.

Pour ton probleme cherche du coté de la fonction select()
elle permet de te dire si telle ou telle socket est accessible en lecture, ecriture.
Et on peut y mettre un timer.

VOILA ;-)

(- Doudou -)
Messages postés
1
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
10 janvier 2006

j avais tout a l'heure le meme probleme que toi voici la solution qui marche a 100% :
tu utilise la fonction select qui peut prendre un timeout voici le code qui peut regler l 'affaire:

fd_set input_set, exc_set; // Create Input set
int s;
timeval timeout;
timeout.tv_sec = 2; // Attends 2 sec pour returner.
timeout.tv_usec = 0;



while (1){
//Set up the input,and exception sets for select().
FD_ZERO(&input_set);
FD_SET(m_Socket, &input_set);
s = select(0 /* vive le c-unix */, &input_set, NULL, NULL,&timeout);
if (s > 0) // Is there data coming in?
{
// tu fais un recv.
}
if (s == SOCKET_ERROR)
{
OutputDebugString("SOCKET_ERROR");
break;
}
if (s == 0)
OutputDebugString("no Data coming in");
}