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 :

Pb avec errno


Sujet :

Réseau C

  1. #1
    dts
    dts est déconnecté
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Pb avec errno
    Salut à tous,

    Je développe une librairie(libgas_fifos.sl) sous HPUX 11.0 qui fournit des méthodes pour réceptionner des messages sur différentes sockets.
    Ces sockets sont non bloquantes, et je dois donc tester errno.
    Mon problème est le suivant :
    Quand je link mon programme de test à la librairie, errno vaut 251, ce qui n'est pas normal ?
    Voici la commande de lien :
    gcc -L. -lgas_fifos test.c -o test
    Voici le code du programme de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            #include <errno.h>
            #include <stdio.h>
     
            /* Library include */
            #include "libgas_fifosdef.h"
     
            int main(void)
            {
                    printf("errno : %d\n", errno);
                    return 0;
            }
    Résultat : errno : 251

    Si vous avez une idée

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 98
    Points : 75
    Points
    75
    Par défaut
    Faut voir déja a quoi correspond errno = 251.

    Je serai tenté de dire que 251 est la derniere valeur qui a été prise par errno et que du coup quand tu l'affiches elle vaut ce qu'elle vaut.

    Sinon ca a l'air correct.

  3. #3
    dts
    dts est déconnecté
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    En gros quand je fais ça, errno = 251
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -L. -lgas_fifos test.c -o test
    et ç errno = 0
    ce qui est logique puisque je ne link pas ma lib.

    Sinon pour créer ma lib je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -lpthread -shared -fpic -I/usr/include/sys -I/usr/include -I/opt/java1.4/include -I/opt/java1.4/include/hp-ux -L/usr/lib/librt.sl -L/usr/lib/libdce.sl gas_fifos_readers.c gas_replay.c thread.c readVIP2.c gas_fifos.c   -o libgas_fifos.sl
    Autrement, quelqu'un connait une fonction pour nettoyer les erreurs au début de mon programme, du style "flush".

  4. #4
    dts
    dts est déconnecté
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je viens d'utiliser le code de la librairie dans un programme externe et il fonctionne normalement. Je pense plutôt que l'erreur vient de la construction de la lib ou du link.

    Merci pour les idées

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Points : 83
    Points
    83
    Par défaut
    je ne vois pas très bien pourquoi tester errno en premier dans le programme, je croyais que la valeur de errno n'était significative que lorsque certaines fonctions indiquaient une erreur.
    J'ai même vu forcer sa valeur à zéro avant d'appeler certaines fonctions. (je ne sais pas si c'est vraiment portable)

  6. #6
    dts
    dts est déconnecté
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je test errno au début du programme, car quand j'arrive à cette fonction, errno vaut 251. Donc j'ai remonté la piste du problème et j'arrive au début du programme avec tout le code commenté et j'ai toujours cette errno à 251.


    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
        while(1)
        {
            printf("Receive from\n");
            retour = recvfrom(s, buf, BUFLEN, O_NONBLOCK, &si_other, &slen);
            if (retour==-1)
            {
                if(errno == EAGAIN)
                {
                    printf("Rien recu\n");
                }
                else
                {
                    printf("errno %d\n",errno);
                }
    .......

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Points : 83
    Points
    83
    Par défaut
    Le problème est que (en simplifiant) la lecture de errno n'est valide qu'immédiatement après le retour d'une fonction qui met errno à jour et qui a indiqué une erreur. Donc si la doc ne dit pas si recvfrom utilise errno, c'est pas clair.....

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par dts
    Je test errno au début du programme, car quand j'arrive à cette fonction, errno vaut 251. Donc j'ai remonté la piste du problème et j'arrive au début du programme avec tout le code commenté et j'ai toujours cette errno à 251.
    Errno à 251 signifie : ENETUNREACH. Au lieu d'utiliser printf, utilises perror, ça affiche la "string standard" d'errno en plus du code d'erreur !
    - Je suis fascine par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre....Et les avions aussi....
    - Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien.
    JC Vandamme.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Points : 83
    Points
    83
    Par défaut
    Dans le standrad C99 il est marqué que (je traduis) : un programme qui utilise errno pour le controle d'erreur doit le mettre à zéro (errno est une lvalue) avant d'appeler la fonction (note 158).
    Il est aussi précisé que les fonctions de la librairie qui modifient errno ne l emettent pas à zéro.
    Donc, mets errno à 0 avant l'appel à ta fonction et teste le aprés

  10. #10
    dts
    dts est déconnecté
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci pour le coup de main c'est résolu. ;-)

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

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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