CONNECT
Section: Manuel du programmeur Linux (2) Updated: 18 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
NOTE
BOGUES
VOIR AUSSI
TRADUCTION
NOM
connect - Débuter une connexion sur une socket.
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd, struct sockaddr *serv_addr,
socklen_t addrlen);
DESCRIPTION
Le paramètre
sockfd
est une socket.
Si la socket est du type
SOCK_DGRAM,
alors
serv_adr
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
serv_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.
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é.
- EBADF
-
Mauvais descripteur.
- EFAULT
-
La structure d'adresse pointe en dehors de l'espace d'adressage.
- ENOTSOCK
-
Le descripteur ne correspond pas à une socket.
- EISCONN
-
La socket est déjà connectée.
- ECONNREFUSED
-
La connexion est refusée par le serveur.
- 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.
- ENETUNREACH
-
Le réseau est inaccessible.
- EADDRINUSE
-
L'adresse est déjà utilisée.
- 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
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).
- EALREADY
-
La socket est non-bloquante et une tentative de connexion précédente ne
s'est pas encore terminée.
- EAGAIN
-
Pas de port local disponible, ou pas assez de place dans les tables de routage. Pour
PF_INET
voir l'appel sysctl
net.ipv4.ip_local_port_range
dans
ip(7)
pour savoir comment augmenter le nombre de ports locaux.
- EAFNOSUPPORT
-
L'adresse transmise n'appartient pas à la famille indiquée dans
son champ
sa_family.
- EACCES, EPERM
-
L'utilisateur a tenté de connecter une adresse broadcast sans avoir activé
l'attribut broadcast, ou la demande de connexion a échoué à cause des
règles d'un firewall local.
CONFORMITÉ
SVr4, 4.4BSD (La fonction
connect
est apparue en premier dans BSD 4.2). SVr4 décrit des erreurs
générales
EADDRNOTAVAIL,
EINVAL,
EAFNOSUPPORT,
EALREADY,
EINTR,
EPROTOTYPE,
et
ENOSR.
Il décrit
également plusieurs causes d'erreurs non présentées ici.
NOTE
Le troisième argument de
connect
est en fait un int (et c'est ce qu'utilisent BSD 4.*, libc4 et libc5).
Une certaine confusion POSIX résulte du "socklen_t" actuel. Les propositions
de standard n'ont pas encore été adoptées, mais glibc2 les suit déjà et
utilise socklen_t. Pour plus de détails voir
accept(2).
BOGUES
La déconnexion d'une socket en appelant
connect
avec un adresse de type
AF_UNSPEC
n'est pas encore implémentée.
VOIR AUSSI
TRADUCTION
Christophe Blaess, 1996-2003.
|