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 :

question sur socket.h linux


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut question sur socket.h linux
    Bonjour, je compte utiliser socket.h pour programmer un client qui tournera sur une version de debian modifier. Ma question est : est ce que je peut modifier mes sockets pour rendre mes receive et mes send bloquant ou non bloquant quand je le souhait avec cette bibliotheque. Est ce qu'il existe d'autre bibliotheque pour manipuler les socket sous linux?

    Je pose cette question car comme je programme en C sur un linux embarqué et que c'est séquentiel. Le fait de savoir si c'est bloquant ou pas me fait tout changer sur la conception de mon programme. Merci d'avance pour votre aide. ;

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Tu as déjà posé la question et on t'a déjà répondu...


    oui en *n*x tu peux faire ça...

    Il y a les modes bloquants et non-bloquants sur les sockets (voir ioctls et fnctls)..

    Voir une discussion ici http://www.developpez.net/forums/sho...d.php?t=333459

    et le man page ici :

    http://www.developpez.net/forums/sho...3&postcount=14

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    oui mais ici je la pose pour linux des fois que sa ne soit pas pareil mais merci de ta reponse

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par doommick31
    Bonjour, je compte utiliser socket.h pour programmer un client qui tournera sur une version de debian modifier. Ma question est : est ce que je peut modifier mes sockets pour rendre mes receive et mes send bloquant ou non bloquant quand je le souhait avec cette bibliotheque.
    Les fonctions non bloquantes, çaÿ le Mal. Apprend à utiliser les threads (pthreads) ou les processus et laisse chacun fait ses boucles bloquantes.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Tu pense que je men sortirai avec des threads ou les pocessus, je sais pas si la chose sur laquelle tourne linux peu me permettre de faire sa. Faut que je pose la question.

    En y repensant, cest vrai que gerer les non bloquant en c, sa va etre galere. Si quelqu'un a de l'experience dans les non bloquant sa peut etre intéressent de savoir les pieges dans lesquelle il ne faut pas tomber. En tous cas merci.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    J'ai une précision a demander toujours au sujet des sockets bloquant et non bloquant. J'ai remarquer lorsque je reçoit sur un socket non bloquant, je fait une boucle de ce style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char reception[1];
    int i;
    do
    {
         i=recv(sock2, reception, sizeof(reception), 0);
         ordre=atoi(reception);
         printf("%c\n",reception);
         prtinf("%d",i);
    }
    while(ordre==0)
    J'ai toujours la même chose en reception, je m'explique j'ai toujours la dernier valeur reçu qui s'affiche je ne retourne pas à une valeur par défaut et mon i est toujours égale a -1 en mode non bloquant.

    Tandis quand mode bloquant et bien sa bloque jusqu'a la reception de quelque chose avec i egale a la taille de se que j'ai reçu.

    J'aimerai savoir si j'ai bien compris et expliquer le comportement des sockets dans les deux modes. Merci

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    ben non.. En mode non-bloquant, par définition, pas de while....

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    ah le while cest parce que apres je fait des if(ordre==1)

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par doommick31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char reception[1];
    int i;
    do
    {
         i=recv(sock2, reception, sizeof(reception), 0);
         ordre=atoi(reception);
         printf("%c\n",reception);
         prtinf("%d",i);
    }
    while(ordre==0)
    Ce code est horriblement faux, voire dangereux...

    La taille de 'reception' vaut 1. La seule chaine valide est "". (à condition de mettre un 0 en [0]. Sinon, l'appel à atoi() invoque un comportement indéfini...

    Quel est ton protocole applicatif ?

    http://emmanuel-delahaye.developpez....eaux.htm#texte

Discussions similaires

  1. Les questions sur les commandes Linux
    Par codon21 dans le forum Linux
    Réponses: 6
    Dernier message: 26/03/2009, 22h18
  2. questions sur socket
    Par mayu5 dans le forum Réseau
    Réponses: 3
    Dernier message: 17/04/2008, 11h19
  3. Question sur Socket!
    Par kurtiss dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 26/07/2007, 20h51
  4. Des questions sur suse linux !
    Par barucca dans le forum SUSE
    Réponses: 3
    Dernier message: 07/04/2004, 11h35

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