NOM¶
connect - Débuter une connexion sur une socket
SYNOPSIS¶
#include <sys/types.h> /* Consultez NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
DESCRIPTION¶
L'appel système
connect() connecte la socket associée au
descripteur de fichier
sockfd à l'adresse indiquée par
addr. L'argument
addrlen indique la taille de
addr. Le
format de l'adresse
addr est déterminé par la famille de la
socket
sockfd ; consultez
socket(2) pour plus de
détails.
Si la socket
sockfd est du type
SOCK_DGRAM, alors
serv_addr
est l'adresse à laquelle les datagrammes seront envoyés par
défaut, et la seule adresse depuis laquelle ils seront reçus. Si la
socket est du type
SOCK_STREAM ou
SOCK_SEQPACKET, cette fonction
tente de se connecter à une autre socket. L'adresse de l'autre socket est
indiquée par
serv_addr, qui doit être une adresse (de
longueur
addrlen) dans le même domaine que la socket. Chaque
domaine de communication interprète le paramètre
addr à
sa manière.
En général, les sockets des protocoles orientés connexion ne
réussissent un appel
connect() qu'une seule fois, alors qu'une
socket d'un protocole sans connexion peut appeler
connect() plusieurs
fois pour changer son affectation. Une socket sans connexion peut interrompre
son affectation en se connectant sur une adresse avec le membre
sa_family de la structure
sockaddr à la valeur
AF_UNSPEC (géré par Linux depuis le noyau 2.2).
VALEUR RENVOYÉE¶
connect() renvoie 0 s'il réussit, ou -1 s'il échoue, auquel cas
errno contient le code d'erreur.
ERREURS¶
Voici une liste d'erreurs générales concernant les sockets. Il peut en
exister d'autres spécifiques au domaine employé.
- EACCES
- Pour les sockets de domaine UNIX qui sont
spécifiées par un nom de chemin : la permission en
écriture est refusée sur le fichier socket, ou la permission de
parcours est refusée pour l'un des répertoires composant le
chemin. (Consultez aussi path_resolution(7).)
- EACCES, EPERM
- L'utilisateur a tenté de se connecter à une
adresse broadcast sans avoir activé l'attribut broadcast, ou la
demande de connexion a échoué à cause des règles d'un
pare-feu local.
- EADDRINUSE
- L'adresse locale est déjà utilisée.
- EAFNOSUPPORT
- L'adresse transmise n'a pas la bonne valeur dans son champ
sa_family.
- EAGAIN
- Pas de port local disponible, ou pas assez de place dans
les tables de routage. Pour AF_INET, consultez la description de
/proc/sys/net/ipv4/ip_local_port_range dans ip(7) pour les
informations indiquant comment augmenter le nombre de ports locaux.
- EALREADY
- La socket est non bloquante et une tentative de connexion
précédente ne s'est pas encore terminée.
- EBADF
- Mauvais descripteur.
- ECONNREFUSED
- La connexion est refusée par le serveur.
- EFAULT
- La structure d'adresse pointe en dehors de l'espace
d'adressage.
- EINPROGRESS
- La socket est non bloquante, et la connexion ne peut pas
être établie immédiatement. Il est alors possible
d'utiliser select(2) ou poll(2) pour attendre que la socket
soit disponible en écriture. Une fois que select(2) confirme
la possibilité d'écrire, utilisez getsockopt(2) pour lire
l'option SO_ERROR du niveau SOL_SOCKET et déterminer si
connect() s'est terminé avec succès (SO_ERROR vaut
zéro) ou en échec ( SO_ERROR contient l'un des codes
d'erreurs listés ici, indiquant le problème).
- EINTR
- L'appel système a été interrompu par
l'arrivée d'un signal avant qu'une connexion valide ne
survienne ; consultez signal(7).
- EISCONN
- La socket est déjà connectée.
- ENETUNREACH
- Le réseau est inaccessible.
- ENOTSOCK
- Le descripteur ne correspond pas à une socket.
- ETIMEDOUT
- Dépassement du délai maximum pendant la
connexion. Le serveur peut être trop chargé pour accepter une
nouvelle connexion. Remarquez que pour les sockets IP, le délai peut
être très long si les syncookies sont activés sur le
serveur.
SVr4, BSD 4.4 (la fonction
connect() est apparue dans BSD 4.2),
POSIX.1-2001.
NOTES¶
POSIX.1-2001 ne requiert pas l'inclusion de
<sys/types.h>, et cet
en‐tête n'est pas nécessaire sous Linux. Cependant, il doit
être inclus sous certaines implémentations historiques (BSD), et les
applications portables devraient probablement l'utiliser.
Le troisième argument de
connect() est en fait un
int (et
c'est ce qu'utilisent BSD 4.x, libc4 et libc5). Une certaine confusion
POSIX a donné le «
socklen_t » actuel,
également utilisé par glibc. Pour plus de détails, consultez
accept(2).
EXEMPLE¶
getaddrinfo(3) contient un exemple d'utilisation de
connect().
VOIR AUSSI¶
accept(2),
bind(2),
getsockname(2),
listen(2),
socket(2),
path_resolution(7)
COLOPHON¶
Cette page fait partie de la publication 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».