SOCKET(2)

NOM
socket - Creer un point de communication.

SYNOPSIS
#include <sys/types.h>
#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 un domaine de communication, a l'interieur duquel s'etablira le dialogue. Ceci permet de selectionner la famille de protocole a employer. Ces familles sont definies dans le fichier linux/socket.h. Les formats actuellement proposes sont :

    AF_UNSPEC
        Famille non specifiee, laisser le systeme la determiner.

    AF_UNIX
        Protocoles local interne 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
        Reserve pour l'ATM Werner

    AF_X25
        Reserve pour le projet CCITT X.25

    AF_INET6
        Reserve pour le projet IP version 6
Les sockets ont 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. Les sockets de ce type sont des flux full-duplex, similaires a des tubes (pipes).

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

    SOCK_RAW
        Transmissions interne au systeme, le type SOCK_RAW, ne peut etre utilise que par le Super-User.

    SOCK_RDM
        Transmission garantie de datagrammes

    SOCK_SEQPACKET
        Dialogue garantissant l'integrite, pour le transport de datagrammes de longueur fixe. Le lecteur peut avoir a lire le paquet de donnees complet a chaque appel systeme read
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. 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. Voir protocols(5). Une socket de type stream doit etre connectee 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). Le protocole de communication utilise pour implementer les sockets stream garantit qu'aucune donnee n'est perdue ou dupliquee. Si un bloc de donnees, pour lequel le correspondant a suffisament de place dans son buffer, n'est pas transmis correctement dans un delai raisonnable, la connexion est consideree comme inutilisable, et les appels systemes renverront une valeur -1 en indiquant une erreur ETIMEDOUT dans la variable globale errno. Eventuellement les protocoles peuvent maintenir les sockets en service en forcant des transmissions directes toutes les minutes en l'absence de toute autre activite. Une erreur est indique si aucune reponse n'est recue sur une socket inactive pendant une periode prolongee (par exemple 5 minutes). 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 systemes 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 sera eliminee. Les sockets de type SOCK_DGRAM ou SOCK_RAW permettent l'emission de datagrammes a des correspondants indiques au moment de l'appel systeme send(2). Les datagrammes sont generalement lus par la fonction recvfrom(2), qui fournit egalement l'adresse du correspondant. Un appel a fcntl(2) permet de preciser un groupe de processus qui recevront un signal SIGURG lors de l'arrivee de donnees hors-bande. Cette fonction permet egalement de valider des entrees/sorties non bloquantes, et une notification asynchrone des evenements par le signal SIGIO. Les operations sur les sockets sont representees 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 RENVOYEE
socket retourne un descripteur referencant la socket cree en cas de reussite. En cas d'echec -1 est renvoye, et errno contient le code d'erreur.

ERREURS

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

EMFILE
    La table des descripteurs par processus est pleine.

ENFILE
    La table des fichiers est pleine.

EACCES
    La creation d'une telle socket n'est pas autorisee.

ENOBUFS
    Pas suffisament d'espace pour allouer les buffers necessaires.

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

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