Provided by: manpages-fr-dev_4.15.0-9_all bug

NOM

       socket - Créer un point de communication

SYNOPSIS

       #include <sys/socket.h>

       int socket(int domain, int type, int protocol);

DESCRIPTION

       socket()  crée  un  point  de  communication  et renvoie un descripteur de fichier qui s'y
       rapporte. Le descripteur de fichier renvoyé par un appel réussi sera celui  au  numéro  le
       plus bas qui n'est pas ouvert actuellement pour le processus.

       Le  paramètre  domain indique le domaine de communication ; cela sélectionne la famille de
       protocole à employer. Elles sont définies dans  le  fichier  <sys/socket.h>.  Les  formats
       actuellement compris par le noyau Linux sont :

       Nom          Objectif                                   Page de manuel
       AF_UNIX      Communication locale                       unix(7)
       AF_LOCAL     Synonyme de AF_UNIX
       AF_INET      Protocoles Internet IPv4                   ip(7)
       AF_AX25      Protocole radio amateur AX.25              ax25(4)
       AF_IPX       IPX - Protocoles Novell
       AF_APPLETALK AppleTalk                                  ddp(7)
       AF_X25       Protocole ITU-T X.25 / ISO-8208            x25(7)
       AF_INET6     Protocoles Internet IPv6                   ipv6(7)
       AF_DECnet    Sockets de protocole DECet
       AF_KEY       Protocole de gestion de clé, développé à
                    l'origine pour être utilisé avec IPsec
       AF_NETLINK   Interface utilisateur noyau                netlink(7)
       AF_PACKET    Interface paquet bas-niveau                packet(7)
       AF_RDS       Protocole  Reliable   Datagram   Sockets   rds(7)
                    (RDS)                                      rds-rdma(7)
       AF_PPPOX     Couche  de  transport PPP générique pour
                    paramétrer  des  tunnels  L2  (L2TP   et
                    PPPoE)
       AF_LLC       Protocole  de  contrôle  de lien logique
                    (IEEE 802.2 LLC)
       AF_IB        Adressage natif InfiniBand
       AF_MPLS      Multiprotocole Label Switching
       AF_CAN       Protocole du bus Controller Area Network
                    automotive
       AF_TIPC      Protocole  TIPC, « sockets de domaine de
                    grappe »
       AF_BLUETOOTH Protocole  du  socket  de   bas   niveau
                    Bluetooth
       AF_ALG       Interface  avec  l'API de chiffrement du
                    noyau
       AF_VSOCK     Protocole VSOCK  (initialement  « VMWare   vsock(7)
                    VSockets »)       de       communication
                    hyperviseur-invité
       AF_KCM       Interface KCM (multiplexeur de connexion
                    au noyau)
       AF_XDP       Interface XDP (express data path)

       Vous  pouvez  trouver plus de détails sur les familles d'adresses ci-dessus, ainsi que des
       informations sur plusieurs autres familles d'adresses, dans address_families(7).

       Le socket a le type indiqué, ce qui indique la sémantique des  communications.  Les  types
       définis actuellement sont :

       SOCK_STREAM     Support  de  dialogue  garantissant  l'intégrité,  fournissant  un flux de
                       données binaires, et intégrant un  mécanisme  pour  les  transmissions  de
                       données hors-bande.

       SOCK_DGRAM      Prise  en  charge  des  datagrammes  (transmissions  sans  connexion,  non
                       garantie, de datagrammes de longueur maximale fixe).

       SOCK_SEQPACKET  Dialogue garantissant l'intégrité, pour le  transport  de  datagrammes  de
                       longueur  fixe. Le lecteur doit lire le paquet de données complet à chaque
                       appel système récupérant l'entrée.

       SOCK_RAW        Accès direct aux données réseau.

       SOCK_RDM        Transmission  fiable  de  datagrammes,  sans  garantie   de   l'ordre   de
                       délivrance.

       SOCK_PACKET     Obsolète,  à  ne  pas  utiliser  dans  les  programmes  actuels. Consultez
                       packet(7).

       Certains types de sockets peuvent ne pas être  implémentés  par  toutes  les  familles  de
       protocoles.

       Depuis Linux 2.6.27, le paramètre type a un autre objectif : en plus d'indiquer le type de
       socket, il peut inclure les valeurs suivantes en les combinant par  un  OU  binaire,  pour
       modifier le comportement de socket() :

       SOCK_NONBLOCK   Placer  l'attribut  d'état  de  fichier  O_NONBLOCK  sur la description du
                       fichier ouvert référencée par le nouveau descripteur de fichier (consulter
                       open(2)).  Utiliser  cet  attribut  économise des appels supplémentaires à
                       fcntl(2) pour obtenir le même résultat.

       SOCK_CLOEXEC    Placer  l'attribut   « close-on-exec »   (FD_CLOEXEC)   sur   le   nouveau
                       descripteur  de  fichier. Consultez la description de l'attribut O_CLOEXEC
                       dans open(2) pour savoir pourquoi cela peut être utile.

       Le protocole à utiliser sur le socket est indiqué par l'argument protocol. Normalement, il
       n'y  a  qu'un  seul  protocole  par  type  de  socket  pour une famille donnée, auquel cas
       l'argument protocol peut être  nul.  Néanmoins,  rien  ne  s'oppose  à  ce  que  plusieurs
       protocoles  existent, auquel cas il est nécessaire de le spécifier. Le numéro de protocole
       dépend  du  domaine  de  communication  du  socket ;  consultez  protocols(5).   Consultez
       getprotoent(3) pour savoir comment associer un nom de protocole à un numéro.

       Des  sockets de type SOCK_STREAM sont des flux d'octets full-duplex. Ils ne préservent pas
       les limites d'enregistrements. Un socket SOCK_STREAM doit être dans un état connecté avant
       que  des  données  puissent  y être lues ou écrites. Une connexion sur un autre socket est
       établie par l'appel système connect(2). Une fois connecté, les données y  sont  transmises
       par  read(2)  et write(2) ou par des variantes de send(2) et recv(2). Quand une session se
       termine, on referme le socket avec close(2).  Les  données  hors-bande  sont  envoyées  ou
       reçues comme il est décrit dans send(2) et recv(2).

       Les  protocoles  de  communication  qui  implémentent les sockets SOCK_STREAM garantissent
       qu'aucune donnée n'est perdue ou  dupliquée.  Si  un  bloc  de  données,  pour  lequel  le
       correspondant  a  suffisamment  de  place dans son tampon, n'est pas transmis correctement
       dans un délai raisonnable, la connexion est considérée  comme  inutilisable.  Si  l'option
       SO_KEEPALIVE  est  activée  sur le socket, le protocole vérifie, d'une manière qui lui est
       spécifique, si le correspondant est toujours  actif.  Un  signal  SIGPIPE  est  envoyé  au
       processus  tentant  d'écrire  sur un socket inutilisable, forçant les programmes ne gérant
       pas ce signal à se terminer. Les sockets de type SOCK_SEQPACKET emploient les mêmes appels
       système que ceux de types SOCK_STREAM, à la différence que la fonction read(2) ne renverra
       que le nombre d'octets requis,  et  toute  autre  donnée  restante  dans  le  paquet  sera
       éliminée. De plus, les frontières des messages seront préservées.

       Les  sockets  de  type  SOCK_DGRAM  ou  SOCK_RAW  permettent  l'envoi  de  datagrammes aux
       correspondants indiqués dans l'appel système sendto(2). Les datagrammes sont  généralement
       lus par la fonction recvfrom(2), qui fournit également l'adresse du correspondant.

       Les  sockets  SOCK_PACKET  sont  obsolètes.  Ils  servent  à  recevoir  les  paquets bruts
       directement depuis le gestionnaire de périphérique. Utilisez plutôt packet(7).

       Un appel à fcntl(2) avec l'argument F_SETOWN permet de préciser un processus ou un  groupe
       de processus qui recevront un signal SIGURG lors de l'arrivée de données hors-bande, ou le
       signal SIGPIPE lorsqu'une connexion sur un  socket  SOCK_STREAM  se  termine  inopinément.
       Cette  fonction  permet  également  de  définir  le  processus  ou groupe de processus qui
       recevront une notification asynchrone  des  événements  d'entrées-sorties  par  le  signal
       SIGIO.  L'utilisation  de  F_SETOWN  est  équivalent  à  un appel ioctl(2) avec l'argument
       FIOSETOWN ou SIOCSPGRP.

       Lorsque le réseau indique une condition d'erreur au module du protocole (par exemple  avec
       un  message  ICMP  pour  IP),  un  drapeau  signale  une  erreur en attente sur le socket.
       L'opération suivante sur ce socket renverra ce code d'erreur. Pour certains protocoles, il
       est  possible  d'activer  une  file  d'attente d'erreurs par socket. Pour plus de détails,
       consultez IP_RECVERR dans ip(7).

       Les opérations sur les sockets sont contrôlées par  des  options  du  niveau  socket.  Ces
       options  sont  définies  dans <sys/socket.h>. Les fonctions setsockopt(2) et getsockopt(2)
       sont utilisées respectivement pour définir ou lire les options.

VALEUR RENVOYÉE

       socket() renvoie un descripteur référençant le socket créé en  cas  de  réussite.  En  cas
       d'échec -1 est renvoyé et errno est positionné pour indiquer l'erreur.

ERREURS

       EACCES La création d'un socket avec le type et le protocole indiqués n'est pas autorisée.

       EAFNOSUPPORT
              L'implémentation ne supporte pas la famille d'adresses indiquée.

       EINVAL Protocole inconnu, ou famille de protocole inexistante.

       EINVAL Attributs incorrects dans type.

       EMFILE La limite du nombre de descripteurs de fichiers par processus a été atteinte.

       ENFILE La  limite  du  nombre  total  de  fichiers  ouverts  pour  le système entier a été
              atteinte.

       ENOBUFS ou ENOMEM
              Pas suffisamment d'espace pour allouer les tampons nécessaires. Le socket  ne  peut
              être créé tant que suffisamment de ressources ne sont pas libérées.

       EPROTONOSUPPORT
              Le type de protocole, ou le protocole lui-même n'est pas disponible dans ce domaine
              de communication.

       D'autres erreurs peuvent être dues aux modules de protocoles sous-jacents.

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008, 4.4BSD.

       Les attributs SOCK_NONBLOCK et SOCK_CLOEXEC sont spécifiques à Linux.

       La fonction socket() est apparue dans BSD 4.2. Elle est généralement portable de/vers  les
       systèmes  non-BSD  supportant  des  clones  des  sockets  BSD  (y compris les variantes de
       System V).

NOTES

       Les constantes explicites utilisées sous BSD 4.x pour  les  familles  de  protocoles  sont
       PF_UNIX,  PF_INET,  etc. alors que AF_UNIX, AF_INET, etc. sont utilisées pour les familles
       d'adresses. Toutefois, même la page de manuel de BSD indiquait « La famille de  protocoles
       est  généralement  la  même  que  la  famille  d'adresses »,  et  les standards ultérieurs
       utilisent AF_* partout.

EXEMPLES

       Un exemple d'utilisation de socket() se trouve dans la page de manuel de getaddrinfo(3).

VOIR AUSSI

       accept(2),  bind(2),  close(2),  connect(2),  fcntl(2),  getpeername(2),   getsockname(2),
       getsockopt(2),  ioctl(2),  listen(2),  read(2),  recv(2), select(2), send(2), shutdown(2),
       socketpair(2), write(2), getprotoent(3), address_families(7),  ip(7),  socket(7),  tcp(7),
       udp(7), unix(7)

       « An  Introductory  4.3BSD  Interprocess  Communication  Tutorial »  et « BSB Interprocess
       Communication Tutorial », réimprimés dans UNIX Programmer's Supplementary Documents Volume
       1.

COLOPHON

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

TRADUCTION

       La  traduction  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier  <barbier@debian.org>,  David  Prévot   <david@tilapin.org>,   Cédric   Boutillier
       <cedric.boutillier@gmail.com>,  Frédéric  Hantrais  <fhantrais@gmail.com> et Jean-Philippe
       MENGUAL <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.