Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       bind - Fournir un nom à une socket

SYNOPSIS

       #include <sys/types.h>          /* Consultez NOTES */
       #include <sys/socket.h>

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

DESCRIPTION

       Quand  une  socket est créée avec l'appel système socket(2), elle existe dans l'espace des
       noms (famille d'adresses) mais  n'a  pas  d'adresse  assignée.  bind()  affecte  l'adresse
       indiquée  dans  addr  à la socket référencée par le descripteur de fichier sockfd. addrlen
       indique  la  taille,  en  octets,  de   la   structure   d'adresse   pointée   par   addr.
       Traditionnellement cette opération est appelée « affectation d'un nom à une socket ».

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

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

       La structure réellement passée dans le paramètre 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 addr pour éviter
       les avertissements du compilateur. Voir l'exemple donné ci‐dessous.

VALEUR RENVOYÉE

       S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et remplit errno  en
       conséquence.

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 valable.

       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 (consultez aussi path_resolution(7)).

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

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

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

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

       ENAMETOOLONG
              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.

CONFORMITÉ

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

NOTES

       POSIX.1-2001 ne requiert pas l'inclusion  de  <sys/types.h>,  et  cet  en‐tête  n'est  pas
       nécessaire  sous  Linux.  Cependant,  il  doit  être inclus sous certaines implémentations
       historiques (BSD), et les applications portables devraient probablement l'utiliser.

       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. Consultez accept(2).

BOGUES

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

EXEMPLE

       Un  exemple  d'utilisation  de  bind()  avec  des  sockets   Internet   se   trouve   dans
       getaddrinfo(3).

       L'exemple  suivant  montre comment affecter un nom à une socket du domaine UNIX (AF_UNIX),
       et accepter les connexions :

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

       #define MY_SOCK_PATH "/somepath"
       #define LISTEN_BACKLOG 50

       #define handle_error(msg) \
           do { perror(msg); exit(EXIT_FAILURE); } while (0)

       int
       main(int argc, char *argv[])
       {
           int sfd, cfd;
           struct sockaddr_un my_addr, peer_addr;
           socklen_t peer_addr_size;

           sfd = socket(AF_UNIX, SOCK_STREAM, 0);
           if (sfd == -1)
               handle_error("socket");

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

           if (bind(sfd, (struct sockaddr *) &my_addr,
                   sizeof(struct sockaddr_un)) == -1)
               handle_error("bind");

           if (listen(sfd, LISTEN_BACKLOG) == -1)
               handle_error("listen");

           /* Nous pouvons maintenant accepter une connexion
              entrante à la fois grâce à accept(2) */

           peer_addr_size = sizeof(struct sockaddr_un);
           cfd = accept(sfd, (struct sockaddr *) &peer_addr,
                        &peer_addr_size);
           if (cfd == -1)
               handle_error("accept");

           /* Code gérant les connexions entrantes... */

           /* Lorsqu'il n'est plus nécessaire, le fichier de la socket,
              MY_SOCK_PATH, doit être supprimé avec unlink(2) ou remove(3) */

VOIR AUSSI

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

COLOPHON

       Cette  page  fait partie de la publication 3.65 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du  projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe    Blaess    <http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de
       traduction de Debian (2006-2009).

       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> ».