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

Réseau C Discussion :

Libpcap supprimer l'attente


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Libpcap supprimer l'attente
    Bonjour à tous

    J'ai crée un soft avec la librairie libpcap, lorsque mon soft détecte le flux que je souhaite vérifier la disponibilité ça marche sans problème. Mais lorsque le flux est absent mon soft attend le flux. Or ce que je veux c'est que lorsqu'il y a pas de flux disponible, il me renvoi un code de retour (-1).

    C'est à cet endroit que "attend" mon programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(pcap_loop(handle,10,callback,buff)<0){
            (void)fprintf(stderr,"pcap_loop: %s\n",pcap_geterr(handle));
            return (-1);
        }
    pcap_loop correspond à cette fonction

    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
    27
    28
    29
    30
    31
     
    int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
    {
        register int n;
     
    	for (;;) {
    		if (p->sf.rfile != NULL) {
    			/*
    			 * 0 means EOF, so don't loop if we get 0.
    			 */
    			n = pcap_offline_read(p, cnt, callback, user);
    		} else {
    			/*
    			 * XXX keep reading until we get something
    			 * (or an error occurs)
    			 */
                  do {
                    n = p->read_op(p, cnt, callback, user);
                  } while (n == 0);
     
    		}
    		if (n <= 0)
    			return (n);
    		if (cnt > 0) {
    			cnt -= n;
    			if (cnt <= 0)
    				return (0);
    		}
     
    	}
    }
    Le do while ne se termine jamais.

    J'ai essayé cela dans ma fonction principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    alarm(10);
    signal(SIGNALRM,alarm_handler(handle));
    Mais cela ne change rien.

    Une idée de comment arrêter cet état d'attente ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Les appels bloquants et non bloquants sont des cas récurrents en C et sous Unix. Avec la libpcap, il existe pcap_setnonblock pour faire cela.

    La man page précise bien, en revanche, que ça va marcher avec pcap_dispatch() mais pas avec pcap_loop(), que tu utilises, puisque ce dernier appel est justement et par définition une boucle sur l'autre appel.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup de ton aide Obsidian, mon programme marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [App Gratuite Productivité] Test nouvelle technologie pour supprimer l'attente
    Par Vite Ma Hotline dans le forum Mon application mobile
    Réponses: 0
    Dernier message: 22/01/2015, 18h35
  2. [AC-2007] supprimer les documents en attente
    Par gwems dans le forum VBA Access
    Réponses: 7
    Dernier message: 29/04/2009, 14h12
  3. Sendmail: Supprimer les mails en attente
    Par Flipmode dans le forum Réseau
    Réponses: 4
    Dernier message: 18/12/2008, 10h40
  4. recupèrer file d'attente d'impression
    Par magic corp. dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2002, 14h12
  5. [Choix] Quelles attentes par rapport aux SGBD ?
    Par thierry34 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 13/07/2002, 20h08

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