> Linux Reviews > man >

socket

socket

Créer un point de communication.


  1. socket.2.man
  2. socket.7.man
  3. socket.9.man


1. socket.2.man

Manpage of SOCKET

SOCKET

Section: Manuel du programmeur Linux (2)
Updated: 17 juin 2004
Index Return to Main Contents
 

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 le domaine de communication pour le dialogue ; ceci sélectionne la famille de protocole à employer. Elles sont définies dans le fichier <sys/socket.h>. Les formats actuellement proposés sont :

NomUtilisationPage
PF_UNIX,PF_LOCAL Communication locale unix(7)
PF_INET IPv4 Protocoles Internet ip(7)
PF_INET6 IPv6 Protocoles Internet
PF_IPX IPX - Protocoles Novell
PF_NETLINK Interface utilisateur noyau netlink(7)
PF_X25 Protocole ITU-T X.25 / ISO-8208 x25(7)
PF_AX25 Protocole AX.25 radio amateur
PF_ATMPVC Accès direct ATM PVCs
PF_APPLETALK Appletalk ddp(7)
PF_PACKET Interface paquet bas-niveau packet(7)

Les sockets ont le type, indiqué ce qui fixe 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
Transmissions sans connexion, non garantie, de datagrammes de longueur fixe, généralement courte.
SOCK_SEQPACKET
Dialogue garantissant l'intégrité, pour le transport de datagrammes de longueur fixe. Le lecteur peut avoir à lire le paquet de données complet à chaque appel système read.
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. Voir packet(7).

Certains types de sockets peuvent ne pas être implémentés par toutes les familles de protocoles. Par exemple, SOCK_SEQPACKET n'est pas implémenté pour AF_INET.

Le protocole à utiliser sur la 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 de la socket. Voir protocols(5). Voir getprotoent(3) pour savoir comment associer un nom de protocole à un numéro.

Une socket de type SOCK_STREAM est un flux d'octets full-duplex, similaire aux tubes (pipes). Elle ne préserve pas les limites d'enregistrements. Une socket SOCK_STREAM doit être dans un état connecté avant que des données puisse y être lues ou écrites. Une connexion sur une autre socket est établie par l'appel système connect(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 utilisant 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 la 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 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 nombre d'octets requis, et toute autre donnée restante 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. Elles servent à recevoir les paquets bruts directement depuis le gestionnaire de périphérique. Utilisez plutôt packet(7).

L'opération F_SETOWN de fcntl(2) permet de préciser un processus ou 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 une socket SOCK_STREAM se termine inopinément. Cette fonction permet également de valider des entrées-sorties non bloquantes, et une notification asynchrone des événements par le signal SIGIO. L'utilisation de F_SETOWN est équivalent à un appel ioctl(2) avec l'argument FSIOSETOWN ou SIOCSPRGR.

Lorsque le réseau indique une condition d'erreur au module du protocole (par exemple l'utilisation d'un message ICMP au lieu d'IP), un drapeau signale une erreur en attente sur la socket. L'opération suivante sur cette 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, voir IP_RECVERR dans ip(7).

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 getsockopt(2) sont utilisées respectivement pour fixer ou lire les options.  

VALEUR RENVOYÉE

S'il réussit, socket() retourne un descripteur référençant la socket créée. S'il échoue, il renvoie -1 et errno contient le code d'erreur.  

ERREURS

EACCES
La création d'une telle socket 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.
EMFILE
La table des fichiers est pleine.
ENFILE
La limite du nombre total de fichiers ouverts sur le système est atteinte.
ENOBUFS ou ENOMEM
Pas suffisamment d'espace pour allouer les tampons nécessaires.
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.  

CONFORMITÉ

BSD 4.4, POSIX.1-2001. 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).  

NOTE

Les constantes explicites utilisées sous BSD 4.* pour les familles 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.  

BOGUES

SOCK_UUCP n'est pas encore implémentée.  

VOIR AUSSI

accept(2), bind(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), ip(7), socket(7), tcp(7), udp(7), unix(7)  

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 13 octobre 1996 et révisée le 14 août 2006.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 socket Â». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 

Index

NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
NOTE
BOGUES
VOIR AUSSI
TRADUCTION

This document was created by man2html using the manual pages.
Time: 00:23:09 GMT, November 20, 2008

2. socket.7.man

Manpage of SOCKET

SOCKET

Section: Manuel de l'administrateur Linux (7)
Updated: 27 mai 2004
Index Return to Main Contents
 

NOM

socket - Interface Linux des sockets.  

SYNOPSIS

#include <sys/socket.h>
mysocket = socket(int socket_family, int socket_type, int protocol);  

DESCRIPTION

Cette page de manuel documente l'interface utilisateur de l'implémentation Linux des sockets réseau. Les sockets compatibles BSD représentent une interface uniforme entre le processus utilisateur et les piles de protocoles réseau dans le noyau. Les modules des protocoles sont groupés en familles de protocoles comme PF_INET, PF_IPX, PF_PACKET et en types de sockets comme SOCK_STREAM ou SOCK_DGRAM. Voir socket(2) pour plus de détails sur les familles et les types de sockets.  

FONCTIONS DE LA COUCHE SOCKET

Ces fonctions servent à un processus utilisateur pour envoyer ou recevoir des paquets et pour faire d'autres opérations sur les sockets. Pour plus de détails, voir leurs pages de manuel respectives. socket(2) crée une socket, connect(2) connecte une socket à une adresse de socket distante, la fonction bind(2) attache une socket à une adresse locale, listen(2) indique à la socket que de nouvelles connexions doivent y être acceptées, et accept(2) fournit une nouvelle socket avec la nouvelle connexion entrante. socketpair(2) renvoie deux sockets anonymes connectées (seulement implémenté pour quelques familles locales comme PF_UNIX)

send(2), sendto(2), et sendmsg(2) envoient des données sur une socket, et recv(2), recvfrom(2), recvmsg(2) reçoivent des données depuis une socket. poll(2) et select(2) attendent que des données arrivent ou que l'émission soit possible. De plus, les opérations d'entrées-sorties standards comme write(2), writev(2), sendfile(2), read(2), et readv(2) peuvent servir à écrire ou lire des données.

getsockname(2) renvoie l'adresse locale d'une socket et getpeername(2) renvoie l'adresse de la socket distante. getsockopt(2) et setsockopt(2) servent à fixer ou lire des options du niveau socket ou protocole. ioctl(2) peut servir pour lire ou écrire d'autres options.

close(2) sert à fermer une socket. shutdown(2) ferme un sens de communication d'une socket full-duplex connectée.

Le positionnement, ou l'utilisation de pread(2) et pwrite(2) avec un décalage non-nul n'est pas possible sur les sockets

On peut faire des entrées-sorties non-bloquantes sur les sockets en fixant l'attribut O_NONBLOCK sur le descripteur de la socket avec fcntl(2). Ensuite toutes les opérations qui devraient normalement bloquer se terminent immédiatement avec l'erreur EAGAIN (l'opération devra être retentée ultérieurement). connect(2) renverra l'erreur EINPROGRESS. L'utilisateur peut alors attendre divers événements avec poll(2) ou select(2).

Événement E/S
ÉvénemtPollOccurrence
LecturePOLLIN De nouvelles données sont arrivées.
LecturePOLLIN Une connexion est établie (pour les sockets orientées connexion)
LecturePOLLHUP Déconnexion du correspondant.
LecturePOLLHUP Connexion rompue (seulement pour les protocoles orientés connexion). Si on écrit sur la socket, le signal SIGPIPE est aussi émis.
ÉcriturePOLLOUT La socket a assez de place dans le
tampon d'émission pour écrire de nouvelles données.
Lect/Écrit. POLLIN
POLLOUT
Un connect(2) en attente est terminé.
Lect/Écrit.POLLERRUne erreur asynchrone s'est produite
Lect/Écrit.POLLHUP Le correspondant à clos un sens de communication
ExceptionPOLLPRI Données urgentes arrivées, le signal SIGURG est alors envoyé.

Une alternative à l'utilisation de poll() et select() est de laisser le noyau informer l'application à propos des événements par l'intermédiaire d'un signal SIGIO. Pour cela l'attribut FASYNC doit être placé sur le descripteur de la socket via fcntl(2) et un gestionnaire de signal pour SIGIO doit être installé avec sigaction(2). Voir les remarques sur les SIGNAUX plus bas.  

OPTIONS DES SOCKETS

Ces options communes à toutes les sockets peuvent être écrites en utilisant setsockopt(2) et lues avec getsockopt(2) avec le niveau socket positionné sur SOL_SOCKET.
SO_ACCEPTCONN
Renvoie une valeur indiquant si la socket a été déclarée comme acceptant les connexions à l'aide de listen(). La valeur 0 indique que la socket n'est pas en attente de connexions ; la valeur 1 indique que la socket accepte les connexions. Peut seulement être lu avec getsockopt().
SO_BSDCOMPAT
Valider une compatibilité bogue-à-bogue avec BSD. Cela n'est pris en compte que par le module du protocole UDP Linux 2.0 et 2.2. Dans ce mode, les erreurs ICMP reçues pour une socket UDP ne seront pas transmises aux programmes utilisateurs. Dans les versions ultérieures du noyau, le support de cette option a été supprimé : Linux 2.4 l'ignore silencieusement et Linux 2.6 génère un avertissement noyau (printk()) si un programme utilise cette option. Linux 2.0 validait aussi une compatibilité bogue-à-bogue avec BSD pour les sockets raw avec cette option, mais cela a été éliminé dans Linux 2.2.
SO_BINDTODEVICE
Attacher cette socket à un périphérique donné, tel lqeth0rq, comme indiqué dans le nom d'interface transmis. Si le nom est une chaîne vide ou si la longueur d'option est nulle, l'attachement de la socket au périphérique est supprimé. L'option transmise est une chaîne terminée par un octet nul, contenant le nom de l'interface, la longueur maximale étant IFNAMSIZ. Si la socket est attachée à une interface, seuls les paquets reçus sur cette interface particulière sont traités par la socket. Remarquez que cela ne fonctionne que pour certains types de sockets, en particulier les sockets AF_INET. Ceci n'est pas supporté pour les sockets packet (utilisez un bind(8) normal dessus).
SO_BROADCAST
Fixer ou lire l'attribut broadcast. Lorsqu'il est actif, une socket datagramme reçoit les paquets envoyés à l'adresse broadcast et peut envoyer des paquets à une adresse broadcast. Cette option n'a aucun effet sur les sockets de type SOCK_STREAM.
SO_DEBUG
Activer le débogage sur la socket. Seulement autorisé pour les processus avec la capacité CAP_NET_ADMIN ou un UID effectif nul.
SO_ERROR
Lire et effacer l'erreur en attente sur la socket. Uniquement valide pour getsockopt(). Renvoie un entier.
SO_DONTROUTE
Ne pas émettre par l'intermédiaire d'une passerelle, n'envoyer qu'aux hôtes directement connectés. Le même effet peut être obtenu avec l'attribut MSG_DONTROUTE durant une opération send(2) sur la socket. Il s'agir d'un attribut entier booléen.
SO_KEEPALIVE
Valide l'émission de messages périodiques gardant la socket ouverte pour les sockets orientées connexion. Il s'agit d'un attribut entier booléen.
SO_LINGER
Fixer ou lire l'option SO_LINGER. L'argument est une structure linger.


struct linger {
    int l_onoff;    /* actif */
    int l_linger;   /* délai maximal */
};

Lorsque ce paramètre est actif, un appel close(2) ou shutdown(2) ne se terminera pas avant que tous les messages en attente pour la socket aient été correctement émis ou que le délai soit écoulé. Sinon, l'appel revient immédiatement et la fermeture est effectuée à l'arrière-plan. Lorsque la socket est fermée lors d'un exit(3), elle se vide toujours à l'arrière-plan.
SO_OOBINLINE
Si cette option est activée, les données hors-bande sont placées directement dans le flux de données reçues. Sinon elles ne sont transmises que si l'attribut MSG_OOB est demandé durant la réception.
SO_PASSCRED
Autorise ou interdit la réception des messages de contrôle SCM_CREDENTIALS. Pour plus de détails, voir unix(7).
SO_PEERCRED
Renvoie les authentifications du processus connecté à l'autre extrémité de la socket. Ce n'est possible que pour les sockets flux PF_UNIX connectés et les paires de sockets datagramme et flux PF_UNIX créés avec socketpair(2) ; voir unix(7). Les références renvoyées sont celles qui avaient cours au moment de l'appel à connect(2) ou socketpair(2). L'argument est une structure ucred. Seulement valide avec getsockopt().
SO_PRIORITY
Fixe la priorité définie par le protocole pour tous les paquets envoyés sur la socket. Linux utiliser cette valeur pour trier les files réseau : les paquets avec une priorité élevés peuvent être traités d'abord, en fonction de la gestion des files sur le périphérique. Pour ip(7), ceci fixe aussi le champ IP Type-Of-Service pour les paquets sortants. Établir une priorité en dehors de l'intervalle 0 à 6 nécessite la capacité CAP_NET_ADMIN.
SO_RCVLOWAT et SO_SNDLOWAT
Indiquent le nombre minimal d'octets dans le tampon pour que la couche socket passe les données au protocole (SO_SNDLOWAT) ou à l'utilisateur en réception (SO_RCVLOWAT). Ces deux valeurs sont initialisées à 1. SO_SNDLOWAT n'est pas modifiable sous Linux (setsockopt échoue avec l'erreur ENOPROTOOPT). SO_RCVLOWAT n'est modifiable que depuis Linux 2.4. Les appels système select(2) et poll(2) ne respectent pas actuellement le réglage SO_RCVLOWAT sous Linux, et marque une socket comme lisible même lorsqu'un seul octet de donnée est disponible. Une lecture suivante sur la socket bloquera jusqu'à ce que SO_RCVLOWAT octets soient disponibles.
SO_RCVTIMEO et SO_SNDTIMEO
Indiquent le délai maximal d'émission ou de réception avant de renvoyer une erreur. Le paramètre est une structure struct timeval. Si une fonction d'entrée ou de sortie bloque pendant cet intervalle de temps et qu'une donnée a été envoyée ou reçue, la valeur de retour de cette fonction sera le nombre de données transmises ; si aucune donnée n'a été transmise et que le délai d'attente est atteint, -1 est renvoyé et errno est positionnée à EAGAIN ou EWOULDBLOCK +.comme si la socket avait été spécifiée comme non bloquante. Si le délai d'attente est défini à zéro (la valeur par défaut), l'opération ne sera jamais interrompue (Ndt : elle devient bloquante).
SO_RCVBUF
Fixer ou lire la taille maximale en octets du tampon de réception. Le noyau double cette valeur (pour donner de l'espace à un en-tête de service) lorsqu'elle est configurée avec setsockopt(), et cette valeur doublée est renvoyée par getsockopt(). La valeur par défaut est fixée par le sysctl rmem_default et la valeur maximale autorisée est fixée par le sysctl rmem_max. La valeur minimum (doublée) de cette option est 256.
SO_RCVBUFFORCE (depuis Linux 2.6.14)
Avec cette option de socket, un processus privilégié (CAP_NET_ADMIN) effectue la même tâche qu'avec SO_RCVBUF, sauf que la limite rmem_max peut être écrasée.
SO_REUSEADDR
Indique que les règles permettant la validation des adresses fournies dans un appel bind(2) doivent autoriser la réutilisation des adresses locales. Pour les sockets PF_INET cela signifie que la socket peut s'attacher à n'importe quelle adresse sauf s'il y a une attente active dessus. Lorsque la socket en attente est attachée à INADDR_ANY avec un port spécifique, il n'est pas possible de s'attacher à nouveau à ce port quelque soit l'adresse locale.
SO_SNDBUF
Fixer ou lire la taille maximale en octets du tampon d'émission. Le noyau double cette valeur (pour donner de l'espace à un en-tête de service) lorsqu'elle est configurée avec setsockopt(), et cette valeur doublée est renvoyée par getsockopt(). La valeur par défaut est fixée par le sysctl wmem_default et la valeur maximale autorisée est fixée par le sysctl wmem_max. La valeur minimum (doublée) de cette option est 2048.
SO_SNDBUFFORCE (depuis Linux 2.6.14)
Avec cette option socket, un processus privilégié (CAP_NET_ADMIN) peut effectuer la même tâche qu'avec SO_SNDBUF, sauf que la limite wmem_max peut être écrasée.
SO_TIMESTAMP
Active ou désactive la réception du message de contrôle SO_TIMESTAMP. Le message de contrôle d'horodatage est envoyé avec le niveau SOL_SOCKET et le champ cmsg_data est une structure struct timeval indiquant l'heure de réception du dernier paquet passé à l'utilisateur dans cet appel. Voir cmsg(3) pour les détails sur les messages de contrôle.
SO_TYPE
Obtenir le type de socket, sous forme d'entier (comme SOCK_STREAM). Ne peut qu'être lu avec getsockopt().
 

SIGNAUX

Lorsqu'on écrit sur une socket orientée connexion qui a été fermée (localement ou à l'autre extrémité) le signal SIGPIPE est envoyé au processus écrivain, et EPIPE est renvoyé. Le signal n'est pas envoyé lorsque l'appel d'écriture contenait l'attribut MSG_NOSIGNAL.

Lorsqu'on le demande avec l'option FIOSETOWN de fcntl() ou l'option SIOCSPGRP de ioctl(), le signal SIGIO est envoyée quand un événement d'entrée-sortie se produit. Il est possible d'utiliser poll(2) ou select(2) dans le gestionnaire de signal pour savoir sur quelle socket l'événement s'est produit. Une alternative (sous Linux 2.2) est de demander un signal temps-réel avec le fnctl() F_SETSIG. Le gestionnaire du signal temps-réel sera invoqué avec le descripteur de fichier dans le champ si_fd de siginfo_t. Voir fcntl(2) pour plus d'informations.

Dans certains cas (par exemple différents processus accédant à la même socket), la condition ayant déclenché le SIGIO peut avoir disparu quand le processus réagit au signal. Si cela se produit, le processus doit attendre à nouveau car Linux lui renverra le signal ultérieurement.  

SYSCTLS

Les sysctls réseau des sockets de base sont accessibles avec les fichiers /proc/sys/net/core/* ou avec l'interface sysctl(2).
rmem_default
contient la taille en octets par défaut du tampon de réception.
rmem_max
contient la taille maximale en octets du tampon de réception qu'un utilisateur peut réclamer avec l'option SO_RCVBUF de la socket.
wmem_default
contient la taille en octets par défaut du tampon d'émission.
wmem_max
contient la taille maximale en octets du tampon d'émission qu'un utilisateur peut réclamer avec l'option SO_SNDBUF de la socket.
message_cost et message_burst
configurent le filtrage par jeton utilisé pour limiter la charge des message d'avertissement dus aux événements réseau extérieurs.
netdev_max_backlog
Nombre maximal de paquets dans la file d'entrée globale.
optmem_max
Taille maximale par socket des données de service et des données de contrôle utilisateur comme les iovecs.
 

IOCTLS

Ces opérations sont accessibles en utilisant ioctl(2) :

error = ioctl(ip_socket, ioctl_type, &value_result);

SIOCGSTAMP
Renvoie une structure struct timeval avec l'horodatage de réception du dernier paquet transmis à l'utilisateur. Ceci permet des mesures précises de circulation sur le réseau. Voir setitimer(2) pour le détail de la struct timeval. Cet ioctl ne devrait être utilisé que si l'option socket SO_TIMESTAMP n'est pas positionnée pour la socket. Autrement, il renvoie l'horodatage du dernier paquet reçu lorsque SO_TIMESTAMP n'était pas positionné, ou il échoue si un tel paquet n'a pas été reçu (c'est-à-dire ioctl() renvoie -1 avec errno contenant ENOENT).
SIOCSPGRP
Fixer le processus ou le groupe de processus auquel envoyer les signaux SIGIO ou SIGURG lorsqu'une opération d'entrée-sortie asynchrone s'est terminée ou si des données urgentes sont disponibles. L'argument est un pointeur sur un pid_t. Si l'argument est positif, on envoie le signal à ce processus. S'il est négatif on l'envoie au groupe de processus dont l'identifiant correspond à la valeur absolue de l'argument. Un processus ne peut demande que l'émission vers lui-même ou son propre groupe, à moins qu'il ait la capacité CAP_KILL ou un UID effectif nul.
FIOASYNC
Changer l'attribut O_ASYNC pour activer ou désactiver le mode d'entrée-sortie asynchrone sur la socket. Le mode d'entrées-sorties asynchrones signifie que le signal SIGIO ou le signal fixé avec F_SETSIG est envoyé quand un événement d'entrée-sortie se produit.
L'argument est un attribut booléen entier.
SIOCGPGRP
Lire le processus ou le groupe de processus auquel les signaux SIGIO ou SIGURG sont envoyés, ou zéro si aucun n'est configuré.

Opérations fcntl() valides :

FIOGETOWN
Comme l'ioctl() SIOCGPGRP.
FIOSETOWN
Comme l'ioctl() SIOCSPGRP.
 

NOTES

Linux suppose que la moitié du tampon d'émission/réception est utilisé pour les structures internes du noyau. Ainsi les sysctls sont deux fois plus grand que ce que l'on peut observer directement sur le câble.

Linux ne permettra la réutilisation des ports qu'avec l'option SO_REUSEADDR lorsque cette option sera positionnée à la fois par le précedent programme qui a effectué un bind() sur le port et par le programme qui veut réutiliser le port. Ceci est différent sur certaines implémentations (par exemple, FreeBSD) où seul le dernier programme doit positionner l'option SO_REUSEADDR. Typiquement, cette différence est invisible depuis que, par exemple, un programme serveur est conçu pour toujours positionner cette option.  

BOGUES

Les options de socket CONFIG_FILTER SO_ATTACH_FILTER et SO_DETACH_FILTER ne sont pas documentées. Pour les utiliser, il est conseillé d'utiliser la bibliothèque libpcap.  

VERSIONS

SO_BINDTODEVICE a été introduit dans Linux 2.0.30. SO_PASSCRED est une nouveauté de Linux 2.2. Les sysctls sont nouveaux dans Linux 2.2. SO_RCVTIMEO et SO_SNDTIMEO sont supportées depuis Linux 2.3.41. Précédemment, les délais d'attente étaient fixés dans les protocoles et ne pouvaient être ni lus ni modifiés.  

AUTEURS

Cette page de manuel a été écrite par Andi Kleen.  

VOIR AUSSI

getsockopt(2), setsockopt(2), socket(2), capabilities(7), ddp(7), ip(7), packet(7),  

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 11 juin 2001, mise à jour par Alain Portal <aportal AT univ-montp2 DOT fr> le 4juillet 2005 et révisée le 14 août 2006.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 7 socket Â». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 

Index

NOM
SYNOPSIS
DESCRIPTION
FONCTIONS DE LA COUCHE SOCKET
OPTIONS DES SOCKETS
SIGNAUX
SYSCTLS
IOCTLS
NOTES
BOGUES
VERSIONS
AUTEURS
VOIR AUSSI
TRADUCTION

This document was created by man2html using the manual pages.
Time: 00:23:09 GMT, November 20, 2008

3. socket.9.man

Manpage of socket

socket

Section: Tcl Built-In Commands (n)
Updated: 8.0
Index Return to Main Contents



 

NAME

socket - Open a TCP network connection  

SYNOPSIS

socket ?options? host port

socket -server command ?options? port




 

DESCRIPTION

This command opens a network socket and returns a channel identifier that may be used in future invocations of commands like read, puts and flush. At present only the TCP network protocol is supported; future releases may include support for additional protocols. The socket command may be used to open either the client or server side of a connection, depending on whether the -server switch is specified.

Note that the default encoding for all sockets is the system encoding, as returned by encoding system. Most of the time, you will need to use fconfigure to alter this to something else, such as utf-8 (ideal for communicating with other Tcl processes) or iso8859-1 (useful for many network protocols, especially the older ones).  

CLIENT SOCKETS

If the -server option is not specified, then the client side of a connection is opened and the command returns a channel identifier that can be used for both reading and writing. Port and host specify a port to connect to; there must be a server accepting connections on this port. Port is an integer port number (or service name, where supported and understood by the host operating system) and host is either a domain-style name such as www.tcl.tk or a numerical IP address such as 127.0.0.1. Use localhost to refer to the host on which the command is invoked.

The following options may also be present before host to specify additional information about the connection:

-myaddr addr
Addr gives the domain-style name or numerical IP address of the client-side network interface to use for the connection. This option may be useful if the client machine has multiple network interfaces. If the option is omitted then the client-side interface will be chosen by the system software.
-myport port
Port specifies an integer port number (or service name, where supported and understood by the host operating system) to use for the client's side of the connection. If this option is omitted, the client's port number will be chosen at random by the system software.
-async
The -async option will cause the client socket to be connected asynchronously. This means that the socket will be created immediately but may not yet be connected to the server, when the call to socket returns. When a gets or flush is done on the socket before the connection attempt succeeds or fails, if the socket is in blocking mode, the operation will wait until the connection is completed or fails. If the socket is in nonblocking mode and a gets or flush is done on the socket before the connection attempt succeeds or fails, the operation returns immediately and fblocked on the socket returns 1.
 

SERVER SOCKETS

If the -server option is specified then the new socket will be a server for the port given by port (either an integer or a service name, where supported and understood by the host operating system; if port is zero, the operating system will allocate a free port to the server socket which may be discovered by using fconfigure to read the -sockname option). Tcl will automatically accept connections to the given port. For each connection Tcl will create a new channel that may be used to communicate with the client. Tcl then invokes command with three additional arguments: the name of the new channel, the address, in network address notation, of the client's host, and the client's port number.

The following additional option may also be specified before host:

-myaddr addr
Addr gives the domain-style name or numerical IP address of the server-side network interface to use for the connection. This option may be useful if the server machine has multiple network interfaces. If the option is omitted then the server socket is bound to the special address INADDR_ANY so that it can accept connections from any interface.

Server channels cannot be used for input or output; their sole use is to accept new client connections. The channels created for each incoming client connection are opened for input and output. Closing the server channel shuts down the server so that no new connections will be accepted; however, existing connections will be unaffected.

Server sockets depend on the Tcl event mechanism to find out when new connections are opened. If the application doesn't enter the event loop, for example by invoking the vwait command or calling the C procedure Tcl_DoOneEvent, then no connections will be accepted.

If port is specified as zero, the operating system will allocate an unused port for use as a server socket. The port number actually allocated may be retrieved from the created server socket using the fconfigure command to retrieve the -sockname option as described below.  

CONFIGURATION OPTIONS

The fconfigure command can be used to query several readonly configuration options for socket channels:
-error
This option gets the current error status of the given socket. This is useful when you need to determine if an asynchronous connect operation succeeded. If there was an error, the error message is returned. If there was no error, an empty string is returned.
-sockname
This option returns a list of three elements, the address, the host name and the port number for the socket. If the host name cannot be computed, the second element is identical to the address, the first element of the list.
-peername
This option is not supported by server sockets. For client and accepted sockets, this option returns a list of three elements; these are the address, the host name and the port to which the peer socket is connected or bound. If the host name cannot be computed, the second element of the list is identical to the address, its first element.

 

EXAMPLES

Here is a very simple time server:

proc Server {channel clientaddr clientport} {
   puts "Connection from $clientaddr registered"
   puts $channel [clock format [clock seconds]]
   close $channel
}

socket -server Server 9900
vwait forever

And here is the corresponding client to talk to the server:


set server localhost
set sockChan [socket $server 9900]
gets $sockChan line
close $sockChan
puts "The time on $server is $line"

 

SEE ALSO

fconfigure(n), flush(n), open(n), read(n)

 

KEYWORDS

bind, channel, connection, domain name, host, network address, socket, tcp


 

Index

NAME
SYNOPSIS
DESCRIPTION
CLIENT SOCKETS
SERVER SOCKETS
CONFIGURATION OPTIONS
EXAMPLES
SEE ALSO
KEYWORDS

This document was created by man2html using the manual pages.
Time: 00:23:09 GMT, November 20, 2008

NORSK BOKMÅL - NORSK BOKMÅL - NORSK BOKMÅL - NORSK BOKMÅL - da - nl - NORSK BOKMÅL - pl