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 :

autour de la fonction select() pour gerer le temps


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Par défaut autour de la fonction select() pour gerer le temps
    Bonjour;

    En faite j'ai un petit soucis à implémenter la fonction select() pour qu'elle repond à mes attentes:
    On a 2 machines A et B.
    A envoie des pings à B, j'ai tapé dans la machine B le code nfq_test.c qui me permet de visulaiser les pings reçues de A, après je voulais modifier ce fichier (nfq_test.c)afin que si A arrete d'envoyer les pings à B, B le saura apres X secondes (j ai mis X=5 ) alors B bloque A.

    Le code ci-dessous montre :
    des qu'on reçoit le premier paquet, le timer s'enclanche et bloque la machine A au bout de 5s même si elle envoie toujours des ping.

    Ce que je veux : des que la machine A arrête d'envoyer des ping, le timer de select s'enclanche et au bout de 5s bloque A. (sauf si A renvoie des paquets dans un délai inférieur à 5s)


    Voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    fd_set rfds;
        struct timeval tv;
        int retval;
     
        FD_ZERO(&rfds);
        FD_SET(fd, &rfds);
        /* Pendant 5 secondes maxi */
        tv.tv_sec = 5;
        tv.tv_usec = 0;
    	retval = select(fd+1, &rfds, NULL, NULL, &tv);
     
      while(retval){
     
    	if((rv = recv(fd, buf, sizeof(buf), 0)) && rv >= 0) {    
    		printf("pkt received\n");
    		nfq_handle_packet(h, buf, rv);
    		retval = select(fd+1, &rfds, NULL, NULL, NULL);}
    	else {   
     
    		printf("wait for packet");
    		retval = select(fd+1, &rfds, NULL, NULL, &tv);
    		}
    	}
     
    	printf("unbinding from queue 0\n");
    	nfq_destroy_queue(qh);

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    une question similaire a été posée il y a quelques semaines, fais quelques recherches. La version abrégée est que select ne te permet pas de savoir combien de temps s'est écoulé depuis qu'elle a bloqué, la structure timeval permet uniquement de paramétrer combien de temps au maximum elle bloquera.

    Au passage, select peut renvoyer -1 en cas d'erreur, ce que tu ne verifies pas.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/01/2012, 15h32
  2. fonction select() pour gérer le temps pour un réseau
    Par albertopisto dans le forum Réseau
    Réponses: 6
    Dernier message: 25/07/2011, 18h27
  3. Réponses: 0
    Dernier message: 02/04/2009, 17h44
  4. Fonction php pour transformer un temps
    Par racegamers dans le forum Langage
    Réponses: 1
    Dernier message: 23/04/2008, 15h15
  5. Réponses: 7
    Dernier message: 17/05/2006, 14h49

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