socket(2) System Calls Manual socket(2) NOM socket - Creer un point de communication BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int socket(int domain, int type, int protocol); DESCRIPTION socket() cree un point de communication et renvoie un descripteur de fichier qui s'y rapporte. Le descripteur de fichier renvoye par un appel reussi sera celui au numero le plus bas qui n'est pas ouvert actuellement pour le processus. Le parametre domain indique le domaine de communication ; cela selectionne la famille de protocole a employer. Elles sont definies dans le fichier . Les formats actuellement compris par le noyau Linux sont : Nom Objectif Page de manuel AF_UNIX Communication locale unix(7) AF_LOCAL Synonyme de AF_UNIX AF_INET Protocoles Internet IPv4 ip(7) AF_AX25 Protocole radio amateur AX.25 . ax25(4) AF_IPX IPX - Protocoles Novell AF_APPLETALK AppleTalk ddp(7) AF_X25 Protocole ITU-T X.25 / ISO/IEC 8208 x25(7) AF_INET6 Protocoles Internet IPv6 ipv6(7) AF_DECnet Sockets de protocole DECet AF_KEY Protocole de gestion de cle, developpe a l'origine pour etre utilise avec IPsec AF_NETLINK Interface utilisateur noyau netlink(7) AF_PACKET Interface paquet bas-niveau packet(7) AF_RDS . Protocole Reliable Datagram Sockets . . rds(7) (RDS) rds-rdma(7) AF_PPPOX Couche de transport PPP generique pour parametrer des tunnels L2 (L2TP et PPPoE) AF_LLC . Protocole de controle de lien logique (IEEE 802.2 LLC) AF_IB . Adressage natif InfiniBand AF_MPLS . Multiprotocole Label Switching AF_CAN . Protocole du bus Controller Area Network automotive AF_TIPC . Protocole TIPC, << sockets de domaine de grappe >> AF_BLUETOOTH . Protocole du socket de bas niveau Bluetooth AF_ALG . Interface avec l'API de chiffrement du noyau AF_VSOCK . Protocole VSOCK (initialement vsock(7) << VMWare VSockets >>) de communication hyperviseur-invite AF_KCM . Interface KCM (multiplexeur de connexion au noyau) AF_XDP . Interface XDP (express data path) Vous pouvez trouver plus de details sur les familles d'adresses ci-dessus, ainsi que des informations sur plusieurs autres familles d'adresses, dans address_families(7). Le socket a le type indique, ce qui indique 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 Prise en charge des datagrammes (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. 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 la description du fichier ouvert referencee par le nouveau descripteur de fichier (consulter open(2)). 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 le 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 du socket ; consultez protocols(5). Consultez getprotoent(3) pour savoir comment associer un nom de protocole a un numero. Des sockets de type SOCK_STREAM sont des flux d'octets full-duplex. Ils ne preservent pas les limites d'enregistrements. Un socket SOCK_STREAM doit etre dans un etat connecte avant que des donnees puissent y etre lues ou ecrites. Une connexion sur un autre socket est etablie par l'appel systeme connect(2). Une fois connecte, 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 le socket avec close(2). Les donnees hors-bande sont envoyees ou recues comme il est decrit dans 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 le 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 un 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 ceux 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. Ils 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 un socket SOCK_STREAM se termine inopinement. Cette fonction permet egalement de definir 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 le socket. L'operation suivante sur ce 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 . Les fonctions setsockopt(2) et getsockopt(2) sont utilisees respectivement pour definir ou lire les options. VALEUR RENVOYEE socket() renvoie un descripteur referencant le socket cree en cas de reussite. En cas d'echec -1 est renvoye et errno est positionne pour indiquer l'erreur. ERREURS EACCES La creation d'un 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 limite du nombre de descripteurs de fichiers par processus a ete atteinte. ENFILE La limite du nombre total de fichiers ouverts pour le systeme entier a ete atteinte. ENOBUFS ou ENOMEM Pas suffisamment d'espace pour allouer les tampons necessaires. Le socket ne peut etre cree 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. STANDARDS POSIX.1-2008. SOCK_NONBLOCK et SOCK_CLOEXEC sont specifiques a Linux. HISTORIQUE POSIX.1-2001, 4.4BSD. 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). Les constantes explicites utilisees sous BSD 4.x pour les familles de protocoles sont PF_UNIX, PF_INET, etc. alors que AF_UNIX, AF_INET, etc. 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'adresses >>, et les standards ulterieurs utilisent AF_* partout. EXEMPLES Un exemple d'utilisation de socket() se trouve dans la page de manuel de getaddrinfo(3). VOIR AUSSI accept(2), bind(2), close(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), address_families(7), ip(7), socket(7), tcp(7), udp(7), unix(7) << An Introductory 4.3BSD Interprocess Communication Tutorial >> et << BSB Interprocess Communication Tutorial >>, reimprimes dans UNIX Programmer's Supplementary Documents Volume 1. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 28 janvier 2024 socket(2)