BIND(2)

NOM
bind - Fournir un nom à une socket

SYNOPSIS
#include <sys/types.h>          /* Voir 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 mais n'a pas de nom assigné). bind() affecte l'adresse spécifié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 (voir accept(2)). Les règles d'affectation de nom varient suivant le domaine de communication. Consultez les pages de manuel Linux de la 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 comme argument addr dépendra de la famille d'adresses. La définition de la structure sockaddr est quelque chose comme :
struct sockaddr {
    sa_family_t sa_family;
    char        sa_data[14];
}
Le seul objet de cette structure est de transtyper le pointeur structure passé dans addr afin d'éviter les avertissements à la compilation. Voir EXEMPLE plus loin.

VALEUR RENVOYÉE
L'appel renvoie 0 s'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 fournie est déjà utilisée.

EBADF
    sockfd n'est pas un descripteur valide.

EINVAL
    La socket est déjà liée à une adresse.

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 d'accès n'est pas autorisé. (Voir aussi path_resolution(7).)

EADDRNOTAVAIL
    Une interface inexistante a été demandée ou bien l'adresse demandée n'était 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