connect
Section: System Calls (2)
Updated: 4 décembre 2022
Index
Return to Main Contents
NOM
connect - Débuter une connexion sur un socket
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
DESCRIPTION
L'appel système connect() connecte le socket associé 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 du socket sockfd ; consultez socket(2) pour plus de
détails.
Si le socket sockfd est du type SOCK_DGRAM, alors addr est
l'adresse à laquelle les datagrammes seront envoyés par défaut, et la seule
adresse depuis laquelle ils seront reçus. Si le socket est du type
SOCK_STREAM ou SOCK_SEQPACKET, cette fonction tente de se connecter à
un autre socket. L'adresse de l'autre socket est indiquée par addr.
Certains sockets de protocole (comme les sockets de flux de domaine UNIX)
peuvent connect() avec succès une seule fois.
Certains sockets de protocole (comme les sockets datagramme des domaines
UNIX et Internet) peuvent utiliser connect() plusieurs fois pour modifier
leur association.
Certains sockets (comme les sockets TCP ainsi que les sockets datagramme des
domaines UNIX et Internet) peuvent rompre l'association en se connectant à
une adresse avec le membre sa_family de sockaddr positionné sur
AF_UNSPEC;, le socket peut par la suite se connecter à une autre adresse
(AF_UNSPEC est pris en charge sur Linux depuis Linux 2.2).
VALEUR RENVOYÉE
connect() renvoie 0 s'il réussit, ou -1 s'il échoue, auquel cas
errno est positionné pour indiquer l'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és 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.
- EACCES
-
Ces codes d'erreur peuvent aussi être renvoyés si une règle SELinux a
interdit une connexion (par exemple si une règle prévoit qu'un mandataire
HTTP ne peut se connecter qu'à des ports associés à des serveurs HTTP et que
le mandataire essaie de se connecter à un autre port).
- EADDRINUSE
-
L'adresse locale est déjà utilisée.
- EADDRNOTAVAIL
-
(Sockets Internet) Le socket indiqué par sockfd n'a pas encore été
attaché a une adresse, et lors d'une tentative d'attachement à un port
éphémère, aucun port n'était disponible dans l'intervalle des ports
éphémères. Consultez les explications concernant
/proc/sys/net/ipv4/ip_local_port_range dans ip(7).
- EAFNOSUPPORT
-
L'adresse transmise n'a pas la bonne valeur dans son champ sa_family.
- EAGAIN
-
Pour les sockets de domaine UNIX non bloquants, le socket n'est pas bloquant
et la connexion ne peut pas être établie immédiatement. Pour les autres
familles de sockets, il n'y a pas assez d'entrées dans le cache de routage.
- EALREADY
-
Le socket est non bloquant et une tentative de connexion précédente ne s'est
pas encore terminée.
- EBADF
-
sockfd n'est pas un descripteur de fichier valable.
- ECONNREFUSED
-
La connect() à un socket de flux n'a rien trouvé qui écoutait à l'adresse
distante.
- EFAULT
-
La structure d'adresse pointe en dehors de l'espace d'adressage.
- EINPROGRESS
-
Le socket est non bloquant et la connexion ne peut pas être établie
immédiatement (les sockets de domaines UNIX échouaient plutôt avec
EAGAIN). Il est alors possible d'utiliser select(2) ou poll(2) pour
attendre que le 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 la réception d'un signal ; consultez
signal(7).
- EISCONN
-
Le socket est déjà connecté.
- ENETUNREACH
-
Le réseau est inaccessible.
- ENOTSOCK
-
Le descripteur de fichier sockfd ne fait pas référence à un socket.
- EPROTOTYPE
-
Le protocole de communication demandé n'est pas accepté par le type de
socket. Cette erreur peut se produire, par exemple, lors d'une tentative de
connexion d'un socket de datagramme UNIX avec un socket de flux.
- ETIMEDOUT
-
Dépassement du délai maximal 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.
STANDARDS
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD, (connect() est apparu dans BSD 4.2).
NOTES
Pour plus de détails sur le type socklen_t, voir accept(2).
Si connect() échoue, considérez que le socket est dans un état non
spécifié. Les applications portables devraient fermer le socket et en créer
un nouveau pour se reconnecter.
EXEMPLES
getaddrinfo(3) contient un exemple d'utilisation de connect().
VOIR AUSSI
accept(2), bind(2), getsockname(2), listen(2), socket(2),
path_resolution(7), selinux(8)
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- STANDARDS
-
- NOTES
-
- EXEMPLES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 20:27:07 GMT, May 22, 2024