connect(2) System Calls Manual connect(2) NOM connect - Debuter une connexion sur un socket BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); DESCRIPTION L'appel systeme connect() connecte le socket associe au descripteur de fichier sockfd a l'adresse indiquee par addr. L'argument addrlen indique la taille de addr. Le format de l'adresse addr est determine par la famille du socket sockfd ; consultez socket(2) pour plus de details. Si le socket sockfd est du type SOCK_DGRAM, alors addr est l'adresse a laquelle les datagrammes seront envoyes par defaut, et la seule adresse depuis laquelle ils seront recus. Si le socket est du type SOCK_STREAM ou SOCK_SEQPACKET, cette fonction tente de se connecter a un autre socket. L'adresse de l'autre socket est indiquee par addr. Certains sockets de protocole (comme les sockets de flux de domaine UNIX) peuvent connect() avec succes 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 a une adresse avec le membre sa_family de sockaddr positionne sur AF_UNSPEC;, le socket peut par la suite se connecter a une autre adresse (AF_UNSPEC est pris en charge sur Linux depuis Linux 2.2). VALEUR RENVOYEE connect() renvoie 0 s'il reussit, ou -1 s'il echoue, auquel cas errno est positionne pour indiquer l'erreur. ERREURS Voici une liste d'erreurs generales concernant les sockets. Il peut en exister d'autres specifiques au domaine employe. EACCES Pour les sockets de domaine UNIX qui sont specifies par un nom de chemin : la permission en ecriture est refusee sur le fichier socket, ou la permission de parcours est refusee pour l'un des repertoires composant le chemin. (Consultez aussi path_resolution(7).) EACCES EPERM L'utilisateur a tente de se connecter a une adresse broadcast sans avoir active l'attribut broadcast, ou la demande de connexion a echoue a cause des regles d'un pare-feu local. EACCES Ces codes d'erreur peuvent aussi etre renvoyes si une regle SELinux a interdit une connexion (par exemple si une regle prevoit qu'un mandataire HTTP ne peut se connecter qu'a des ports associes a des serveurs HTTP et que le mandataire essaie de se connecter a un autre port). EADDRINUSE L'adresse locale est deja utilisee. EADDRNOTAVAIL (Sockets Internet) Le socket indique par sockfd n'a pas encore ete attache a une adresse, et lors d'une tentative d'attachement a un port ephemere, aucun port n'etait disponible dans l'intervalle des ports ephemeres. 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 etre etablie immediatement. Pour les autres familles de sockets, il n'y a pas assez d'entrees dans le cache de routage. EALREADY Le socket est non bloquant et une tentative de connexion precedente ne s'est pas encore terminee. EBADF sockfd n'est pas un descripteur de fichier valable. ECONNREFUSED La connect() a un socket de flux n'a rien trouve qui ecoutait a 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 etre etablie immediatement (les sockets de domaines UNIX echouaient plutot avec EAGAIN). Il est alors possible d'utiliser select(2) ou poll(2) pour attendre que le socket soit disponible en ecriture. Une fois que select(2) confirme la possibilite d'ecrire, utilisez getsockopt(2) pour lire l'option SO_ERROR du niveau SOL_SOCKET et determiner si connect() s'est termine avec succes (SO_ERROR vaut zero) ou en echec (SO_ERROR contient l'un des codes d'erreurs listes ici, indiquant le probleme). EINTR L'appel systeme a ete interrompu par la reception d'un signal ; consultez signal(7). EISCONN Le socket est deja connecte. ENETUNREACH Le reseau est inaccessible. ENOTSOCK Le descripteur de fichier sockfd ne fait pas reference a un socket. EPROTOTYPE Le protocole de communication demande n'est pas accepte 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 Depassement du delai maximal pendant la connexion. Le serveur peut etre trop charge pour accepter une nouvelle connexion. Remarquez que pour les sockets IP, le delai peut etre tres long si les syncookies sont actives sur le serveur. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001, SVr4, 4.4BSD, (connect() est apparu dans 4.2BSD). NOTES Si connect() echoue, considerez que le socket est dans un etat non specifie. Les applications portables devraient fermer le socket et en creer 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 1 novembre 2023 connect(2)