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 :

Récupérer l'adresse de bind d'un socket


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Récupérer l'adresse de bind d'un socket
    Bonjour à tous les devs du forum, j'ai une petite question sur les fonctions réseaux en UNIX/linux. Je suis issu du monde Java et j'accuse une certaine impuissance dans les pages de manuel d'unix... Quelqu'un a-t-il déjà eu besoin de trouver l'adresse sur laquelle un socket avait été "bindé" ?

    J'ai un code du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int foo(){
        //retourne le descripteur d'un socket TCP
        int socket = socket(AF_INET,SOCK_STREAM, 0);
        bind(fd, addr); //addr est l'adresse que je veux retrouver plus tard...
        //...etc.
    }
     
    int bar(int fd){
        //retourne l'adresse du socket...
        ... je sèche ici !
    }
    Merci à tous ceux qui me liront et qui accessoirement pourront m'orienter sur une fonction adéquate.
    Alex

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Salut,

    Pour commencer, ton prototype de la fonction bind est bizzare : elle prend normalement trois parametres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include <sys/types.h>
           #include <sys/socket.h>
     
           int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
    my_addr est une structure que tu dois toi-meme remplir : quelque chsoe du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      struct sockaddr_in serv_addr;
     
      bzero((char *)&serv_addr, sizeof(serv_addr));
      serv_addr.sin_family=AF_INET;
      serv_addr.sin_port=htons(123456);
      serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
     
      if (bind(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr))==-1){
        perror("bind error");
        close(sock);
        exit(-1);
      }
    Donc quant à recuperer la structure... Je ne comprends pas bien ta question....

    Maintenant, si tu veux recuperer une structure similaire provenant du client, tu fais, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct sockaddr_in cl_addr;
    if (recvfrom(sock, &buff, sizeof(buff), 0, (struct sockaddr *)&cl_addr, &len_cl)==-1){
          perror("recvfrom error\n");
          close(sock);
          exit(-1);
        }
    recvfrom, ou recv, etc.... c'est le meme principe à chaque fois.
    Ta structure sera alors remplie avec les informations voulues....

    Mais peut-etre n'ai-je pas saisi ta question... :

    ++
    Pouic

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Cote serveur
    Salut et merci de ta reponse, meme si ca ne repond pas a ma question, je vais avoir besoin du recvfrom dans peu de temps.

    Je vais tacher d'etre plus clair. J'ai besoin de savoir, a partir d'un descripteur de socket, sur quelle adresse ce socket est attache. Car ce n'est pas mon programme qui fait le bind(...). Par contre je sais que c'est un socket serveur qui est sur ma machine et non pas un socket client.

    Docteur... est-ce grave ?
    A+

  4. #4
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Ok, j'avais mal compris : tu a le descripteur associé à la socket, et tu veux recuperer la structure sockaddr correspondante.

    Tu peux utiliser getsockname :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    struct sockaddr_in info;
    int len = sizeof info;
     
    if( getsockname( s, (struct sockaddr *) &info, &len) < 0 ) {
    	fprintf(stderr, "getsockname() echoue\n");
    	exit(1);
    }
    <...>
    J'espere avoir repondu a ta question

    ++
    Pouic

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Probleme resolu
    Impeccable, je n'avais pas connaissance de cette fonction, meme apres d'intenses fouillements au dela des frontieres des man-pages... Ouf! Merci beaucoup et bonne journee !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/01/2009, 15h33
  2. Réponses: 2
    Dernier message: 05/01/2009, 17h12
  3. [MFC]récupérer l'adresse MAC
    Par julien20vt dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h22
  4. Comment récupérer les adresses WWW dans Internet Explorer ?
    Par chaours dans le forum Web & réseau
    Réponses: 7
    Dernier message: 03/09/2003, 14h27
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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