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 :

Erreur fonction read dans socket et une boucle


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 39
    Par défaut Erreur fonction read dans socket et une boucle
    Bonsoir.

    J'ai un problème avec mon programme socket serveur, la fonction read qui permet de recevoir une chaine de caractère déconne dès que je la mets dans une boucle j'ai une erreur de segmentation, tandis que quand j'enlève la boucle ça marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    char recu[30]={0};
     
    while(strcmp(recu,"eteindre")!=0)
     {
        memset(recu,0,sizeof(recu));
        //met a zero sur toute la taille de la variable recu
        read(fdaccept,recu,sizeof(recu)); //ici je recois par exemple "bonjour".
        //fdaccept est une variable qui contient le resultat de la fct accept (librairie socket)
        reconnaissance(recu);
       // passage de recu à la fct reconnaissance.
    }
    Donc sans la boucle ça marche avec non.
    J'utilise la boucle pour rester en écoute d'un nouveau message, pour avoir plusieurs messages.

    J'ai fait des recherches et on parle d'entrée/sortie bloquante ou non bloquante, situées dans la bibliothèque stdio.h, mais je pense qu'il a une solution plus simple, j'espère.

    Merci d'avoir lu jusqu'à la fin merci.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char recu[30]={0};
     
    while(strcmp(recu,"eteindre")!=0)
     {
        memset(recu,0,sizeof(recu)); //inutile
        read(fdaccept,recu,sizeof(recu)); //rtfm : read retourne un size_t et tu ne teste pas sa valeur de retour.
        reconnaissance(recu);
    }
    Sinon tu peux utiliser un débogueur pour comprendre exactement ce qu'il se passe dans ton programme.

    N.B. : RTMF signifie Read The Fucking Manual

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 39
    Par défaut
    Ok merci (I've RTFM), j'ai fini par trouver au bout d'une dizaine de relectures ... et oui,je suis pas très attentifs... bref. Merci quand même et la réponse la voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int n=0;
    while((n=read(fdaccept,recu,sizeof(recu)))>0)
    {
    reconnaissance(recu);
    }
    on met le read dans une boucle en gardant le resultat renvoyer dans n qui est comparer à 0)

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

Discussions similaires

  1. Erreur lors de l'execution d'une boucle
    Par lily59 dans le forum Langage
    Réponses: 4
    Dernier message: 18/11/2011, 18h19
  2. fonction solve au cours d'une boucle
    Par chabacano dans le forum MATLAB
    Réponses: 1
    Dernier message: 24/06/2009, 14h35
  3. Passer un paramètre dans Include, depuis une boucle
    Par Xandar dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/05/2009, 10h36
  4. Fonctions de position souris : faire une boucle
    Par renaud26 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/01/2009, 11h55
  5. Erreur fonction Excel dans macro
    Par jboul dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/07/2008, 15h05

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