Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       socket - Creer 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() cree un point de communication, et renvoie un descripteur.

       Le  parametre  domain  indique  le  domaine  de  communication  pour le
       dialogue ; ceci selectionne la famille de protocole a  employer.  Elles
       sont  definies dans le fichier <sys/socket.h>. Les formats actuellement
       proposes 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           Acces direct ATM PVCs
       AF_APPLETALK        Appletalk                         ddp(7)
       AF_PACKET           Interface paquet bas-niveau       packet(7)

       La  socket  a  le  type  indique,  ce  qui  fixe  la   semantique   des
       communications. Les types definis actuellement sont :

       SOCK_STREAM     Support    de    dialogue   garantissant   l'integrite,
                       fournissant un flux de donnees binaires,  et  integrant
                       un   mecanisme   pour   les  transmissions  de  donnees
                       hors-bande.

       SOCK_DGRAM      Transmissions  sans   connexion,   non   garantie,   de
                       datagrammes de longueur maximale fixe.

       SOCK_SEQPACKET  Dialogue garantissant l'integrite, pour le transport de
                       datagrammes de longueur fixe. Le lecteur doit  lire  le
                       paquet  de  donnees  complet  a  chaque  appel  systeme
                       recuperant l'entree.

       SOCK_RAW        Acces direct aux donnees reseau.

       SOCK_RDM        Transmission fiable de datagrammes,  sans  garantie  de
                       l'ordre de delivrance.

       SOCK_PACKET     Obsolete,   a  ne  pas  utiliser  dans  les  programmes
                       actuels. Consultez packet(7).

       Certains types de sockets peuvent ne pas etre  implementes  par  toutes
       les  familles  de  protocoles.  Par  exemple,  SOCK_SEQPACKET n'est pas
       implemente pour AF_INET.

       Depuis Linux 2.6.27, le parametre 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'etat de fichier O_NONBLOCK sur le
                       nouveau descripteur de  fichier  ouvert.  Utiliser  cet
                       attribut   economise   des   appels  supplementaires  a
                       fcntl(2) pour obtenir le meme resultat.

       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 etre utile.

       Le  protocole  a  utiliser  sur  la  socket  est indique par l'argument
       protocol. Normalement, il n'y a qu'un seul protocole par type de socket
       pour  une famille donnee, auquel cas l'argument protocol peut etre nul.
       Neanmoins, rien ne s'oppose a ce  que  plusieurs  protocoles  existent,
       auquel  cas  il  est necessaire de le specifier. Le numero de protocole
       depend  du  domaine  de  communication   de   la   socket ;   consultez
       protocols(5).  Consultez getprotoent(3) pour savoir comment associer un
       nom de protocole a un numero.

       Une socket de  type  SOCK_STREAM  est  un  flux  d'octets  full-duplex,
       similaire   aux  tubes  (pipes).  Elle  ne  preserve  pas  les  limites
       d'enregistrements. Une  socket  SOCK_STREAM  doit  etre  dans  un  etat
       connect'e  avant  que  des  donnees  puisse  y etre lues ou ecrites. Une
       connexion  sur  une  autre  socket  est  etablie  par  l'appel  systeme
       connect(2).  Une  fois  connectee,  les  donnees  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 donnees
       hors-bande sont envoyees ou recues en utilisant send(2) et recv(2).

       Les  protocoles  de  communication   qui   implementent   les   sockets
       SOCK_STREAM garantissent qu'aucune donnee n'est perdue ou dupliquee. Si
       un bloc de donnees, pour lequel  le  correspondant  a  suffisamment  de
       place  dans  son  tampon, n'est pas transmis correctement dans un delai
       raisonnable,  la  connexion  est  consideree  comme  inutilisable.   Si
       l'option  SO_KEEPALIVE est activee sur la socket, le protocole verifie,
       d'une maniere qui lui est specifique, si le correspondant est  toujours
       actif.  Un  signal SIGPIPE est envoye au processus tentant d'ecrire sur
       une socket inutilisable, forcant les programmes ne gerant pas ce signal
       a  se  terminer. Les sockets de type SOCK_SEQPACKET emploient les memes
       appels systeme que celles de types SOCK_STREAM, a la difference que  la
       fonction  read(2)  ne  renverra que le nombre d'octets requis, et toute
       autre donnee restante dans  le  paquet  sera  eliminee.  De  plus,  les
       frontieres des messages seront preservees.

       Les  sockets  de  type  SOCK_DGRAM  ou  SOCK_RAW  permettent l'envoi de
       datagrammes aux correspondants indiques dans l'appel systeme sendto(2).
       Les  datagrammes sont generalement lus par la fonction recvfrom(2), qui
       fournit egalement l'adresse du correspondant.

       Les sockets SOCK_PACKET sont obsoletes. Elles servent  a  recevoir  les
       paquets  bruts  directement  depuis  le  gestionnaire  de peripherique.
       Utilisez plutot packet(7).

       Un appel a fcntl(2) avec l'argument  F_SETOWN  permet  de  preciser  un
       processus ou un groupe de processus qui recevront un signal SIGURG lors
       de l'arrivee de donnees hors-bande, ou  le  signal  SIGPIPE  lorsqu'une
       connexion  sur  une  socket  SOCK_STREAM  se termine inopinement. Cette
       fonction permet egalement de fixer le processus ou groupe de  processus
       qui    recevront    une    notification   asynchrone   des   evenements
       d'entrees-sorties par le signal SIGIO. L'utilisation  de  F_SETOWN  est
       equivalent a un appel ioctl(2) avec l'argument FIOSETOWN ou SIOCSPGRP.

       Lorsque le reseau 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'operation 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
       details, consultez IP_RECVERR dans ip(7).

       Les operations sur les sockets  sont  controlees  par  des  options  du
       niveau  socket.  Ces  options  sont  definies  dans <sys/socket.h>. Les
       fonctions setsockopt(2) et getsockopt(2) sont utilisees  respectivement
       pour fixer ou lire les options.

VALEUR RENVOY'EE

       socket()  renvoie  un descripteur referencant la socket creee en cas de
       reussite. En cas d'echec -1 est renvoye,  et  errno  contient  le  code
       d'erreur.

ERREURS

       EACCES La  creation  d'une socket avec le type et le protocole indiques
              n'est pas autorisee.

       EAFNOSUPPORT
              L'implementation ne supporte pas la famille d'adresses indiquee.

       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  systeme  a
              ete atteinte.

       ENOBUFS ou ENOMEM
              Pas  suffisamment d'espace pour allouer les tampons necessaires.
              La socket ne peut etre creee tant que suffisamment de ressources
              ne sont pas liberees.

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

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

CONFORMIT'E

       BSD 4.4, POSIX.1-2001.

       Les attributs SOCK_NONBLOCK et SOCK_CLOEXEC sont specifiques a Linux.

       La  fonction  socket()  est apparue dans BSD 4.2. Elle est generalement
       portable de/vers les systemes 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-
       tete n'est pas necessaire sous Linux. Cependant, il  doit  etre  inclus
       sous  certaines  implementations historiques (BSD), et les applications
       portables devraient probablement l'utiliser.

       Les constantes explicites utilisees sous BSD 4.x pour les  familles  de
       protocoles  sont  PF_UNIX, PF_INET... et AF_UNIX... sont utilisees pour
       les familles d'adresses. Toutefois, meme  la  page  de  manuel  de  BSD
       indiquait  << La  famille de protocoles est generalement la meme que la
       famille  d'adresse >>,  et  les  standards  ulterieurs  utilisent  AF_*
       partout.

       L'en-tete <sys/types.h> n'est necessaire que pour libc4 et precedentes.
       Certains programmes, comme  util-linux,  pretendent  etre  portables  a
       toutes les versions de Linux et des bibliotheques. Ces paquets ont sans
       doute besoin de ce fichier d'en-tete.

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 >> a  ete
       reimprime dans UNIX Programmer's Supplementary Documents Volume 1.

       << BSD  Interprocess  Communication Tutorial >> est reproduit dans UNIX
       Programmer's Supplementary Documents Volume 1.

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

       Veuillez  signaler  toute  erreur   de   traduction   en   ecrivant   a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.