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 :

Un peu d'éclaircissement sur la fonction socket()


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Un peu d'éclaircissement sur la fonction socket()
    Bonjour, n'étant pas un foudre de guerre en C, je demande donc un peu d'aide ici d'autant plus que je ne pratique pas souvent le C...

    SYNOPSIS DU PROBLEME :
    Voilà dans le but de me faciliter un peu la tache et surtout à but éducatif, je cherche à me faire une sorte de petite bibliothèque d'abstraction pour les sockets sous linux.

    En regardant de plus près dans sys/socket.h j'ai vu que la fonction socket() prend des int comme argument pour le "domaine" (PF_LOCAL ou PF_INET) et pour le type (SOCK_DGRAM ou SOCK_STREAM)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int socket(int domain, int type, int protocol);
    Hors j'aimerai connaitre ces valeurs pour me débloquer dans ma petite fonction perso, ou bien si quelqu'un aurait un suggestion pour résoudre mon problème que je vais exposer ci-dessous après avoir mis les sources.

    main.c
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include "sockets.h"
    #include "sockets.c"
     
    int main(int argc, char *argv[])
    {
        int sock;
     
        sock = make_sock(2, 2);
        if(sock == 0)
        {
            printf("YES");
        }
        else
        {
            printf("BAD");
        }
        return 0;
    }
    sockets.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef SOCKETS_H_INCLUDED
    #define SOCKETS_H_INCLUDED
     
    int make_sock(int argi, int argj);
     
    #endif // SOCKETS_H_INCLUDED
    sockets.c
    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
    32
    33
    34
    35
    #include <sys/types.h>
    #include <sys/socket.h>
     
    typedef int SOCK;
     
    int make_sock(int argi, int argj)
    {
        SOCK sock;
        char type1[8 + 1], type2[11 + 1];
     
         /* LOCAL OR INET? */
        switch(argi)
        {
            case 1: strcpy(type1, "PF_LOCAL"); break;
            case 2: strcpy(type1, "PF_INET"); break;
        }
     
        /* DGRAM OR STREAM? */
        switch(argj)
        {
            case 1: strcpy(type2, "SOCK_DGRAM"); break;
            case 2: strcpy(type2, "SOCK_STREAM"); break;
        }
     
        sock = socket(type1, type2, 0);
     
        if(sock != -1)
        {
            return 0; // Socket created successfully
        }
        else
        {
            return 1; // Socket not created
        }
    }
    Voila donc dans les switch/case j'essai de renseigner les valeur PF_* et SOCK_*, mais ca ne fonctionne pas, d'un coté comme je l'ai dit le C je pratique peu, ensuite je demandais donc vu que selon socket() c est des int que l'on doit passer si quelqu'un peut m'indiquer ou trouver la reponse, car evidement si pour PF_INET et SOCK_STREAM par exemple je pouvais passer cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sock = socket(1, 1, 0);
    ça me faciliterai GRANDEMENT la tache...

    Voila la sortie du compilo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /home/david/Projets/BetaTest/sockets.c||In function ‘make_sock’:|
    /home/david/Projets/BetaTest/sockets.c|27|attention : passing argument 1 of ‘socket’ makes integer from pointer without a cast|
    /home/david/Projets/BetaTest/sockets.c|27|attention : passing argument 2 of ‘socket’ makes integer from pointer without a cast|
    ||=== Build finished: 2 errors, 0 warnings ===|
    Voila je vous remercie donc d'avance

  2. #2
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    En y regardant de plus près j'ai fait quelques modifications, et apparemment ça à l'air de marcher... je verrai au fur et à mesure donc... je me suis pris la tête pour rien je pense...

    main.c (j'ai mis directement "PF_INET" et "SOCK_STREAM")
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include "sockets.h"
    #include "sockets.c"
     
    int main(int argc, char *argv[])
    {
        int sock;
     
        sock = make_sock(PF_INET, SOCK_STREAM);
        if(sock == 0)
        {
            printf("YES");
        }
        else
        {
            printf("BAD");
        }
        return 0;
    }
    sockets.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef SOCKETS_H_INCLUDED
    #define SOCKETS_H_INCLUDED
     
    int make_sock(int domain, int type);
     
    #endif // SOCKETS_H_INCLUDED
    sockets.c (il est sur que c'est apparement plus leger... et moins prise de tete comme ça)
    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
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
     
     
    typedef int SOCK;
     
    int make_sock(int domain, int type)
    {
        SOCK sock;
     
        sock = socket(domain, type, 0);
     
        if(sock != -1)
        {
            return 0; // Socket created successfully
        }
        else
        {
            return 1; // Socket not created
        }
    }
    D'un coté en regardant bien cette fonction est un peu inutile mais bon ça reste à but éducatif...

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 26/04/2011, 18h43
  2. [Débutant] [imreconstruct] Éclaircissements sur la fonction
    Par sirouna dans le forum Images
    Réponses: 13
    Dernier message: 27/04/2010, 23h19
  3. Petit éclaircissement sur la fonction to_days
    Par monstor dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/04/2009, 11h27
  4. Besoin d'éclaircissement sur les sockets
    Par Delphy113 dans le forum Langage
    Réponses: 3
    Dernier message: 11/06/2008, 18h10
  5. sockets : warning sur la fonction accept()
    Par bit_o dans le forum Réseau
    Réponses: 8
    Dernier message: 20/05/2007, 13h35

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