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