dwww Home | Manual pages | Find package

socket(2)                     System Calls Manual                    socket(2)

NOM
       socket - Créer un point de communication

BIBLIOTHÈQUE
       Bibliothèque C standard (libc, -lc)

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  ap-
       pel  réussi  sera  celui au numéro le plus bas qui n'est pas ouvert ac-
       tuellement pour le processus.

       Le paramètre domain indique le domaine de communication ;  cela  sélec-
       tionne  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  PP-
                    PoE)
       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  Blue-
                    tooth
       AF_ALG       Interface  avec  l'API de chiffrement du
                    noyau
       AF_VSOCK     Protocole VSOCK  (initialement  « VMWare   vsock(7)
                    VSockets »)  de  communication  hypervi-
                    seur-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-des-
       sus,  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 communi-
       cations. Les types définis actuellement sont :

       SOCK_STREAM     Support de dialogue garantissant l'intégrité,  fournis-
                       sant un flux de données binaires, et intégrant un méca-
                       nisme 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écu-
                       pé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  ac-
                       tuels. 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  so-
       cket() :

       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  descrip-
                       tion  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 proto-
       col. 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éan-
       moins,  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'op-
       tion 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 fron-
       tières des messages seront préservées.

       Les sockets de type SOCK_DGRAM ou SOCK_RAW permettent l'envoi de  data-
       grammes 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 pa-
       quets bruts directement depuis le gestionnaire de périphérique.  Utili-
       sez plutôt packet(7).

       Un appel à fcntl(2) avec l'argument F_SETOWN permet de préciser un pro-
       cessus 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 fonc-
       tion  permet  également  de définir le processus ou groupe de processus
       qui recevront une notification asynchrone des événements d'entrées-sor-
       ties 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 er-
       reur en attente sur le socket. L'opération suivante sur ce socket  ren-
       verra ce code d'erreur. Pour certains protocoles, il est possible d'ac-
       tiver 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 ni-
       veau socket. Ces options sont définies dans <sys/socket.h>.  Les  fonc-
       tions 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 dispo-
              nible dans ce domaine de communication.

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

STANDARDS
       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),  getpro-
       toent(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  Program-
       mer's Supplementary Documents Volume 1.

TRADUCTION
       La  traduction française de cette page de manuel a été créée par Chris-
       tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <ste-
       phan.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.cou-
       lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>,  Thomas  Huriaux
       <thomas.huriaux@gmail.com>,  Nicolas François <nicolas.francois@centra-
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon  Paillard  <si-
       mon.paillard@resel.enst-bretagne.fr>,    Denis   Barbier   <barbier@de-
       bian.org>, David Prévot  <david@tilapin.org>,  Cédric  Boutillier  <ce-
       dric.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⟩.

Pages du manuel de Linux 6.03   5 février 2023                       socket(2)

Generated by dwww version 1.15 on Sat Jun 29 00:39:45 CEST 2024.