SOCKET(2)          Manuel du programmeur Linux          SOCKET(2)


NOM
       socket - Créer un point de communication.

SYNOPSIS
       #include <sys/types.h>
       #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 un domaine de communication, à
       l'intérieur duquel s'établira le dialogue.  Ceci permet de
       sélectionner la famille  de  protocole  à  employer.   Ces
       familles  sont  définies  dans  le fichier linux/socket.h.
       Les formats actuellement proposés sont :


              AF_UNSPEC
                       Famille non spécifiée, laisser le  système
                       la déterminer.

              AF_UNIX  Protocoles locaux internes UNIX (pipe,...)

              AF_INET  Protocoles Internet (UDP, TCP, etc...)

              AF_AX25  Radio amateurs AX.25

              AF_IPX   Protocoles Novell.

              AF_APPLETALK
                       Protocoles Apple.

              AF_NETROM
                       Radio amateurs NetRom.

              AF_BRIDGE
                       Passerelle multi-protocoles.

              AF_AAL5  Réservé pour l'ATM Werner

              AF_X25   Réservé pour le projet CCITT X.25

              AF_INET6 Réservé pour le projet IP version 6

       Les sockets ont le type, indiqué, ce qui  fixe  la  séman­
       tique  des  communications. Les types définis actuellement
       sont :


              SOCK_STREAM
                       Support    de    dialogue     garantissant



Linux                      18 Mai 1999                          1





SOCKET(2)          Manuel du programmeur Linux          SOCKET(2)


                       l'intégrite,   fournissant   un   flux  de
                       données binaires, et intégrant  un  mécan­
                       isme  pour  les  transmissions  de données
                       hors-bande.

                       Les sockets  de  ce  type  sont  des  flux
                       full-duplex,   similaires   à   des  tubes
                       (pipes).


              SOCK_DGRAM
                       Transmissions    sans    connexion,    non
                       garantie, de datagrammes de longueur fixe,
                       généralement courte.

              SOCK_RAW Transmissions internes au système, le type
                       SOCK_RAW,  ne peut être utilisé que par le
                       Super-User.

              SOCK_RDM Transmission garantie de datagrammes

              SOCK_SEQPACKET
                       Dialogue garantissant l'intégrite, pour le
                       transport de datagrammes de longueur fixe.
                       Le lecteur peut avoir à lire le paquet  de
                       données  complet  à  chaque  appel système
                       read


       Le protocole à utiliser sur  la  socket  est  indiqué  par
       l'argument protocol.  Normalement il n'y a qu'un seul pro­
       tocole  par  type  de  socket  pour  une  famille  donnée.
       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. Voir protocols(5).



       Une  socket  de  type stream doit être connectée avant que
       des données puisse y être lues ou écrites.  Une  connexion
       sur  une autre socket est établie par l'appel système con­
       nect(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 util­
       isant send(2) et recv(2).

       Le protocole de communication utilisé pour implémenter les



Linux                      18 Mai 1999                          2





SOCKET(2)          Manuel du programmeur Linux          SOCKET(2)


       sockets  stream  garantit qu'aucune donnée n'est perdue ou
       dupliquée.  Si un bloc de données, pour lequel  le  corre­
       spondant a suffisament de place dans son buffer, n'est pas
       transmis correctement dans un délai raisonnable,  la  con­
       nexion  est  considérée  comme inutilisable, et les appels
       systèmes renverront une valeur -1 en indiquant une  erreur
       ETIMEDOUT dans la variable globale errno.

       Eventuellement  les protocoles peuvent maintenir les sock­
       ets en  service  en  forçant  des  transmissions  directes
       toutes  les  minutes en l'absence de toute autre activité.
       Une erreur est indiquée si aucune réponse n'est reçue  sur
       une  socket  inactive  pendant  une période prolongée (par
       exemple 5 minutes).

       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èmes  que  celles  de  types SOCK_STREAM, à la
       différence que la fonction read(2) ne renverra que le nom­
       bre  d'octets  requis, et toute autre donnée restante sera
       éliminée.

       Les sockets de  type  SOCK_DGRAM  ou  SOCK_RAW  permettent
       l'émission de datagrammes à des correspondants indiqués au
       moment de l'appel système send(2).  Les  datagrammes  sont
       généralement  lus par la fonction recvfrom(2), qui fournit
       également l'adresse du correspondant.

       Un appel à fcntl(2) permet de préciser un groupe  de  pro­
       cessus qui recevront un signal SIGURG lors de l'arrivée de
       données hors-bande.  Cette fonction  permet  également  de
       valider des entrées/sorties non bloquantes, et une notifi­
       cation asynchrone des évènements par le signal SIGIO.

       Les opérations sur les sockets sont représentées  par  des
       options  du niveau socket.  Ces options sont définies dans
       sys/socket.h.  Les  fonctions  setsockopt(2)  et  getsock­
       opt(2)  sont  utilisées  respectivement pour fixer ou lire
       les options.

VALEUR RENVOYÉE
       socket retourne 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
       EPROTONOSUPPORT
               Le type de protocole,  ou  le  protocole  lui-même
               n'est pas disponible dans ce domaine de communica­
               tion.




Linux                      18 Mai 1999                          3





SOCKET(2)          Manuel du programmeur Linux          SOCKET(2)


       EMFILE  La  table  des  descripteurs  par  processus   est
               pleine.

       ENFILE  La table des fichiers est pleine.

       EACCES  La   création   d'une   telle   socket  n'est  pas
               autorisée.

       ENOBUFS Pas suffisament d'espace pour allouer les  buffers
               nécessaires.

CONFORMITÉ
       BSD  4.4  (la  fonction  socket est apparue dans BSD 4.2).
       Relativement portable vers les systèmes non-BSD supportant
       des  clones  des  sockets  BSD (y compris les variantes de
       System V).

NOTE
       Les constantes explicites utilisées sous BSD 4.* pour  les
       familles  de  de  protocoles  sont  PF_UNIX, PF_INET... et
       AF_UNIX... 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'adresse", et les standards ultérieurs utilisent
       AF_* partout.

VOIR AUSSI
       accept(2), bind(2), connect(2),  getprotoent(3),  getsock­
       name(2),   getsockopt(2),  ioctl(2),  listen(2),  read(2),
       recv(2), select(2), send(2),  shutdown(2),  socketpair(2),
       write(2)


TRADUCTION
       Christophe Blaess, 1997.






















Linux                      18 Mai 1999                          4