IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Socket] timeout recv


Sujet :

C++

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 396
    Par d�faut [Socket] timeout recv
    Bonjour,

    Voila j'aimerais mettre un timeout � mon recv mais j'ai un petit probl�me.

    En cherchant sur internet j'ai trouv� que je devait ins�rer ceci dans mon code:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    struct timeval tv;
    tv.tv_sec = 1;
    tv.tv_usec = 500*1000;
    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval));
    Et moi je fait comme ceci pour r�cup�rer les paquets:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    while(nbr = recv(sock, ptr_buf, taille, 0))
    {
        //...recalcule taille et incrément ptr_buf de nbr
    }
    Le probl�me c'est que toutes les 1,5 secondes, il fait un tour de boucle et moi je voudrait que la boucle s'arr�te au premier timeout !

    Merci d'avance...

  2. #2
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Mars 2006
    Messages
    38
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par d�faut
    Donc si je comprend bien, tant que tu re�oit des paquets, apres chaque reception, tu fait un tour de boucle. Et si jamais tu arrives � la fin du timeout sans avoir re�us de packet, tu souhaite sortir du while.

    Et bien faut que au debut du while tu test si tu as re�us un message.
    Pour un recv non bloquant comme le tiens, nbr = -1 et errno = EAGAIN si aucun message n'est arriv� � la fin du timeout

    Sinon, personnelement, pour utiliser un timeout avec recv ou recvfrom, j'utilise la fonction poll.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    int poll(struct pollfd *ufds, unsigned int nfds, int délai);
    Cette fonction te permet de surveiller un descripeur de fichier. A la fin du timeout, que tu aura choisis, tu peux recuperer l'�tat de ton descripteur de fichier. Et entre autre, tu peux savoir si tu a re�us des donn�es. Et si c'est le cas, tu fait un appel � receive. Et c'est ok.

    En esperant que cela t'aide, bonne continuation.

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 396
    Par d�faut
    Oui �a m'aide , merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Socket] - Probl�me recv avec UTF8
    Par JuS80 dans le forum R�seau
    R�ponses: 4
    Dernier message: 17/04/2007, 09h46
  2. Socket : fonction recv.
    Par thieum74 dans le forum C++
    R�ponses: 7
    Dernier message: 06/04/2006, 10h18
  3. [Socket] Send/Recv type double sur architectures diff�rentes
    Par nicolas.pied dans le forum R�seau
    R�ponses: 4
    Dernier message: 31/03/2006, 20h33
  4. R�ponses: 2
    Dernier message: 31/05/2005, 09h50
  5. [Sockets] Timeout sur accept() ?
    Par MikB dans le forum D�veloppement
    R�ponses: 2
    Dernier message: 30/12/2003, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo