bionic (2) socket.2.gz

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

NOM

       socket - Créer un point de communication

SYNOPSIS

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

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

DESCRIPTION

       socket() crée un point de communication, et renvoie un descripteur.

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

       Nom                 Utilisation                       Page
       AF_UNIX, AF_LOCAL   Communication locale              unix(7)
       AF_INET             Protocoles Internet IPv4          ip(7)
       AF_INET6            Protocoles Internet IPv6          ipv6(7)
       AF_IPX              IPX - Protocoles Novell
       AF_NETLINK          Interface utilisateur noyau       netlink(7)
       AF_X25              Protocole ITU-T X.25 / ISO-8208   x25(7)
       AF_AX25             Protocole AX.25 radio amateur
       AF_ATMPVC           Accès direct ATM PVCs
       AF_APPLETALK        Appletalk                         ddp(7)
       AF_PACKET           Interface paquet bas-niveau       packet(7)

       La  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      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 le nouveau descripteur de fichier
                       ouvert. 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 la 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  de  la  socket ;  consultez
       protocols(5). Consultez getprotoent(3) pour savoir comment associer un nom de protocole à un numéro.

       Une  socket  de  type  SOCK_STREAM est un flux d'octets full-duplex, similaire aux tubes (pipes). Elle ne
       préserve pas les limites d'enregistrements. Une socket SOCK_STREAM doit être dans un état connecté  avant
       que des données puisse y être lues ou écrites. Une connexion sur une autre socket est établie par l'appel
       système connect(2). Une fois connectée, 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 la socket avec close(2). Les
       données hors-bande sont envoyées ou reçues en utilisant 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 la 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 une 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  celles  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. Elles 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 une 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 la socket. L'opération suivante sur  cette  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 la socket créée en cas de réussite. En  cas  d'échec  -1  est
       renvoyé, et errno contient le code d'erreur.

ERREURS

       EACCES La création d'une 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 table des fichiers est pleine.

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

       ENOBUFS ou ENOMEM
              Pas  suffisamment d'espace pour allouer les tampons nécessaires. La socket ne peut être créée 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É

       BSD 4.4, POSIX.1-2001.

       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

       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.

       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.

EXEMPLE

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

VOIR AUSSI

       accept(2),  bind(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),
       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 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> ».