Man page - socket(2)

Packages contains this manual

Available languages:

en fr tr ja ru zh_TW zh_CN de

Manual

socket

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
EXEMPLES
VOIR AUSSI
TRADUCTION

NOM

socket - Créer un point de communication

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/socket.h>

int socket(int domain , int type , int protocol );

DESCRIPTION

socket () crĂ©e un point de communication et renvoie un descripteur de fichier qui s’y rapporte. Le descripteur de fichier renvoyĂ© par un appel rĂ©ussi sera celui au numĂ©ro le plus bas qui n’est pas ouvert actuellement pour le processus.

Le paramÚtre domain indique le domaine de communication ; cela sélectionne la famille de protocole à employer. Elles sont définies dans le fichier <sys/socket.h> . Les formats actuellement compris par le noyau Linux sont :

Image grohtml-3858265-1.png

Vous pouvez trouver plus de dĂ©tails 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 indiqué, ce qui indique la sémantique des communications. Les types définis actuellement sont :

SOCK_STREAM

Support de dialogue garantissant l’intĂ©gritĂ©, fournissant un flux de donnĂ©es binaires, et intĂ©grant un mĂ©canisme pour les transmissions de donnĂ©es 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’intĂ©gritĂ©, pour le transport de datagrammes de longueur fixe. Le lecteur doit lire le paquet de donnĂ©es complet Ă  chaque appel systĂšme rĂ©cupĂ©rant l’entrĂ©e.

SOCK_RAW

AccÚs direct aux données réseau.

SOCK_RDM

Transmission fiable de datagrammes, sans garantie de l’ordre de dĂ©livrance.

SOCK_PACKET

ObsolĂšte, Ă  ne pas utiliser dans les programmes actuels. Consultez packet (7).

Certains types de sockets peuvent ne pas ĂȘtre implĂ©mentĂ©s par toutes les familles de protocoles.

Depuis Linux 2.6.27, le paramùtre 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’état de fichier O_NONBLOCK sur la description du fichier ouvert rĂ©fĂ©rencĂ©e par le nouveau descripteur de fichier (consulter open (2)). Utiliser cet attribut Ă©conomise des appels supplĂ©mentaires Ă  fcntl (2) pour obtenir le mĂȘme rĂ©sultat.

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 ĂȘtre utile.

Le protocole Ă  utiliser sur le socket est indiquĂ© par l’argument protocol . Normalement, il n’y a qu’un seul protocole par type de socket pour une famille donnĂ©e, auquel cas l’argument protocol peut ĂȘtre nul. 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 du socket ; consultez protocols (5). Consultez getprotoent (3) pour savoir comment associer un nom de protocole Ă  un numĂ©ro.

Des sockets de type SOCK_STREAM sont des flux d’octets full-duplex. Ils ne prĂ©servent pas les limites d’enregistrements. Un socket SOCK_STREAM doit ĂȘtre dans un Ă©tat connectĂ© avant que des donnĂ©es puissent y ĂȘtre lues ou Ă©crites. Une connexion sur un autre socket est Ă©tablie par l’appel systĂšme connect (2). Une fois connectĂ©, 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 le socket avec close (2). Les donnĂ©es hors-bande sont envoyĂ©es ou reçues comme il est dĂ©crit dans send (2) et recv (2).

Les protocoles de communication qui implĂ©mentent les sockets SOCK_STREAM garantissent qu’aucune donnĂ©e n’est perdue ou dupliquĂ©e. Si un bloc de donnĂ©es, pour lequel le correspondant a suffisamment de place dans son tampon, n’est pas transmis correctement dans un dĂ©lai raisonnable, la connexion est considĂ©rĂ©e comme inutilisable. Si l’option SO_KEEPALIVE est activĂ©e sur le socket, le protocole vĂ©rifie, d’une maniĂšre qui lui est spĂ©cifique, si le correspondant est toujours actif. Un signal SIGPIPE est envoyĂ© au processus tentant d’écrire sur un 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Ăšme que ceux de types SOCK_STREAM , Ă  la diffĂ©rence que la fonction read (2) ne renverra que le nombre d’octets requis, et toute autre donnĂ©e restante dans le paquet sera Ă©liminĂ©e. De plus, les frontiĂšres des messages seront prĂ©servĂ©es.

Les sockets de type SOCK_DGRAM ou SOCK_RAW permettent l’envoi de datagrammes aux correspondants indiquĂ©s dans l’appel systĂšme sendto (2). Les datagrammes sont gĂ©nĂ©ralement lus par la fonction recvfrom (2), qui fournit Ă©galement l’adresse du correspondant.

Les sockets SOCK_PACKET sont obsolÚtes. Ils servent à recevoir les paquets bruts directement depuis le gestionnaire de périphérique. Utilisez plutÎt packet (7).

Un appel Ă  fcntl (2) avec l’argument F_SETOWN permet de prĂ©ciser un processus ou un groupe de processus qui recevront un signal SIGURG lors de l’arrivĂ©e de donnĂ©es hors-bande, ou le signal SIGPIPE lorsqu’une connexion sur un socket SOCK_STREAM se termine inopinĂ©ment. Cette fonction permet Ă©galement de dĂ©finir le processus ou groupe de processus qui recevront une notification asynchrone des Ă©vĂ©nements d’entrĂ©es-sorties par le signal SIGIO . L’utilisation de F_SETOWN est Ă©quivalent Ă  un appel ioctl (2) avec l’argument FIOSETOWN ou SIOCSPGRP .

Lorsque le rĂ©seau 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’opĂ©ration 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 dĂ©tails, consultez IP_RECVERR dans ip (7).

Les opérations sur les sockets sont contrÎlées par des options du niveau socket. Ces options sont définies dans <sys/socket.h> . Les fonctions setsockopt (2) et getsockopt (2) sont utilisées respectivement pour définir ou lire les options.

VALEUR RENVOYÉE

socket () renvoie un descripteur rĂ©fĂ©rençant le socket créé en cas de rĂ©ussite. En cas d’échec -1 est renvoyĂ© et errno est positionnĂ© pour indiquer l’erreur.

ERREURS

EACCES

La crĂ©ation d’un socket avec le type et le protocole indiquĂ©s n’est pas autorisĂ©e.

EAFNOSUPPORT

L’implĂ©mentation ne supporte pas la famille d’adresses indiquĂ©e.

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 été atteinte.

ENFILE

La limite du nombre total de fichiers ouverts pour le systÚme entier a été atteinte.

ENOBUFS ou ENOMEM

Pas suffisamment d’espace pour allouer les tampons nĂ©cessaires. Le socket ne peut ĂȘtre créé tant que suffisamment de ressources ne sont pas libĂ©rĂ©es.

EPROTONOSUPPORT

Le type de protocole, ou le protocole lui-mĂȘme n’est pas disponible dans ce domaine de communication.

D’autres erreurs peuvent ĂȘtre dues aux modules de protocoles sous-jacents.

STANDARDS

POSIX.1-2008.

SOCK_NONBLOCK et SOCK_CLOEXEC sont spécifiques à Linux.

HISTORIQUE

POSIX.1-2001, 4.4BSD.

La fonction socket () est apparue dans BSD 4.2. Elle est généralement portable de/vers les systÚmes non-BSD supportant des clones des sockets BSD (y compris les variantes de System V).

Les constantes explicites utilisĂ©es sous BSD 4.x pour les familles de protocoles sont PF_UNIX , PF_INET , etc. alors que AF_UNIX , AF_INET , etc. 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’adresses », et les standards ultĂ©rieurs 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 », rĂ©imprimĂ©s dans UNIX Programmer’s Supplementary Documents Volume 1 .

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .