cs_oliverman
Messages postés40Date d'inscriptionsamedi 14 décembre 2002StatutMembreDernière intervention 5 juillet 2007
-
23 avril 2004 à 14:32
cs_amine2004
Messages postés1Date d'inscriptionlundi 7 juin 2004StatutMembreDernière intervention10 janvier 2006
-
10 janv. 2006 à 17:57
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
cs_6co
Messages postés114Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention 5 avril 20121 23 avril 2004 à 19:01
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
blazman34
Messages postés9Date d'inscriptionlundi 24 novembre 2003StatutMembreDernière intervention10 juillet 2008 25 avril 2004 à 22:26
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.
cs_amine2004
Messages postés1Date d'inscriptionlundi 7 juin 2004StatutMembreDernière intervention10 janvier 2006 10 janv. 2006 à 17:57
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");
}