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.65 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> ».