bind

BIND(2)                   Manuel du programmeur Linux                  BIND(2)



NOM
       bind - Fournir un nom à une socket

SYNOPSIS
       #include <sys/types.h>
       #include <sys/socket.h>

       int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);

DESCRIPTION
       bind() fournit à la socket sockfd, l'adresse locale my_addr. my_addr
       est longue de addrlen octets. Traditionnellement cette opération est
       appelée « affectation d'un nom à une socket ». Quand une socket est
       créée, par l'appel système socket(2), elle existe dans l'espace des
       noms mais n'a pas de nom assigné.

       Il est normalement nécessaire d'affecter une adresse locale avec
       bind() avant qu'une socket SOCK_STREAM puisse recevoir des connexions
       (voir accept(2)).

       Les règles d'affectation de nom varient suivant le domaine de
       communication. Consultez le manuel Linux section 7 pour de plus amples
       informations. Pour AF_INET voir ip(7), pour AF_INET6 voir ipv6(7), pour
       AF_UNIX voir unix(7), pour AF_APPLETALK voir ddp(7), pour AF_PACKET
       voir packet(7), pour AF_X25 voir x25(7) et pour AF_NETLINK voir
       netlink(7).

       La structure réellement passée dans le paramètre my_addr dépend du
       domaine de communication. La structure sockaddr est définie comme :

         struct sockaddr {
             sa_family_t sa_family;
             char        sa_data[14];
         }

       Le seul objet de cette structure est de transtyper le pointeur passé
       dans my_addr pour éviter les avertissements du compilateur. L'exemple
       suivant montre comment affecter un nom à une socket du domaine Unix
       (AF_UNIX) :

         #include <sys/socket.h>
         #include <sys/un.h>
         #include <stdlib.h>
         #include <stdio.h>
         #include <string.h>

         #define MY_SOCK_PATH "/somepath"

         int
         main(int argc, char *argv[])
         {
             int sfd;
             struct sockaddr_un addr;

             sfd = socket(AF_UNIX, SOCK_STREAM, 0);
             if (sfd == -1) {
                 perror("socket");
                 exit(EXIT_FAILURE);
             }

             memset(&addr, 0, sizeof(struct sockaddr_un));
                                 /* Efface la structure */
             addr.sun_family = AF_UNIX;
             strncpy(addr.sun_path, MY_SOCK_PATH,
                     sizeof(addr.sun_path) - 1);

             if (bind(sfd, (struct sockaddr *) &addr,
                     sizeof(struct sockaddr_un)) == -1) {
                 perror("bind");
                 exit(EXIT_FAILURE);
             }
             ...
         }

VALEUR RENVOYÃE
       L'appel renvoie 0 quand il réussit, ou -1 s'il échoue, auquel cas
       errno contient le code d'erreur.

ERREURS
       EACCES L'adresse est protégée et l'utilisateur n'est pas le
              superutilisateur.

       EADDRINUSE
              L'adresse est déjà utilisée.

       EBADF  sockfd n'est pas un descripteur valide.

       EINVAL La socket est déjà connectée.

       ENOTSOCK
              sockfd est un descripteur de fichier, pas une socket.

       Les erreurs suivantes sont spécifiques aux sockets du domaine UNIX
       (AF_UNIX) :

       EACCES L'accès à un élément du chemin est interdit. (Voir aussi
              path_resolution(2).)

       EADDRNOTAVAIL
              Une interface inexistante est demandée, ou bien l'adresse
              demandée n'est pas locale.

       EFAULT my_addr pointe en dehors de l'espace d'adresse accessible.

       EINVAL La longueur addr_len est fausse, ou la socket n'est pas de la
              famille AF_UNIX.

       ELOOP  my_addr contient des références circulaires (à travers un
              lien symbolique).

       ENAMETOOLONG
              my_addr est trop long.

       ENOENT Le fichier n'existe pas.

       ENOMEM Pas assez de mémoire pour le noyau.

       ENOTDIR
              Un élément du chemin d'accès n'est pas un répertoire.

       EROFS  L'inœud se trouverait dans un système de fichiers en lecture
              seule.

BOGUES
       Les options de proxy transparent ne sont pas décrites.

CONFORMITÃ
       SVr4, BSD 4.4, POSIX.1-2001 (la fonction bind() est apparue dans
       BSD 4.2).

NOTES
       Le troisième argument de bind() est en fait un int (et c'est ce
       qu'utilisent BSD 4.x, libc4 et libc5). Une certaine confusion POSIX a
       donné le « socklen_t » actuel, également utilisé dans la glibc.
       Voir accept(2).

VOIR AUSSI
       accept(2), connect(2), getsockname(2), listen(2), path_resolution(2),
       socket(2), getaddrinfo(3), ip(7), ipv6(7), socket(7), unix(7)

TRADUCTION
       Cette page de manuel a été traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006, et mise Ã
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian
       sont directement gérées par Julien Cristau <jcristau@debian.org> et
       l'équipe francophone de traduction de Debian.

       Veuillez signaler toute erreur de traduction en écrivant Ã
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».



Linux 2.6.7                      23 juin 2004                          BIND(2)