Scroll to navigation

connect(2) System Calls Manual connect(2)

NUME

connect - inițiază o conexiune la un soclu

BIBLIOTECA

Biblioteca C standard (libc, -lc)

SINOPSIS

#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
            socklen_t addrlen);

DESCRIERE

Apelul de sistem connect() conectează soclul menționat de descriptorul de fișier sockfd la adresa specificată de addr. Argumentul addrlen specifică dimensiunea lui addr. Formatul adresei din addr este determinat de spațiul de adresare al soclului sockfd; consultați socket(2) pentru detalii suplimentare.

Dacă soclul sockfd este de tip SOCK_DGRAM, atunci addr este adresa la care sunt trimise implicit datagramele și singura adresă de la care sunt primite datagramele. Dacă soclul este de tip SOCK_STREAM sau SOCK_SEQPACKET, acest apel încearcă să realizeze o conexiune la soclul care este asociat adresei specificate de addr.

Unele socluri de protocol (de exemplu, socluri de flux de domeniu UNIX) pot executa cu succes connect() o singură dată.

Unele socluri de protocol (de exemplu, socluri de tip datagramă în domeniile UNIX și Internet) pot utiliza connect() de mai multe ori pentru a-și schimba asocierea.

Unele socluri de protocol (de exemplu, socluri TCP, precum și socluri datagramă în domeniile UNIX și Internet) pot dizolva asocierea prin conectarea la o adresă cu membrul sa_family din sockaddr definit la AF_UNSPEC; ulterior, soclul poate fi conectat la o altă adresă. (AF_UNSPEC este acceptat începând cu Linux 2.2.)

VALOAREA RETURNATĂ

Dacă conexiunea sau asocierea reușește, se returnează zero. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

Următoarele sunt doar erori generale de soclu. Pot exista și alte coduri de eroare specifice domeniului.

Pentru soclurile de domeniu UNIX, care sunt identificate prin nume de rută: permisiunea de scriere este refuzată pe fișierul soclu sau permisiunea de căutare este refuzată pentru unul dintre directoarele din prefixul căii. A se vedea și path_resolution(7).
Utilizatorul a încercat să se conecteze la o adresă de difuzare fără a avea activat fanionul de difuzare al soclului sau solicitarea de conectare a eșuat din cauza unei reguli de paravan de protecție local.
De asemenea, poate fi returnat dacă o politică SELinux a refuzat o conexiune (de exemplu, dacă există o politică care spune că un proxy HTTP se poate conecta numai la porturile asociate cu servere HTTP, iar proxy-ul încearcă să se conecteze la un port diferit).
Adresa locală este deja în uz.
(Soclurile din domeniul de Internet) Soclul la care se face referire prin sockfd nu a fost asociat anterior unei adrese și, la încercarea de a-l asocia la un port efemer, s-a stabilit că toate numerele de port din intervalul de porturi efemere sunt utilizate în prezent. A se vedea discuția despre /proc/sys/net/ipv4/ip_local_port_range în ip(7).
Adresa furnizată nu avea familia de adrese corectă în câmpul sa_family.
Pentru soclurile de domeniu UNIX fără blocare, soclul este fără blocare, iar conexiunea nu poate fi finalizată imediat. Pentru alte familii de socluri, nu există suficiente intrări în memoria cache de direcționare.
Soclul este fără blocare și o încercare anterioară de conectare nu a fost încă finalizată.
sockfd nu este un descriptor de fișier deschis valid.
Un apel connect() pe un soclu de flux nu a găsit pe nimeni ascultând la adresa de la distanță.
Adresa structurii soclului este în afara spațiului de adrese al utilizatorului.
Soclul este fără blocare și conexiunea nu poate fi finalizată imediat (soclurile de domeniu UNIX eșuează în schimb cu EAGAIN). Este posibil să efectuați select(2) sau poll(2) pentru completare selectând soclul pentru scriere. După ce select(2) indică permisiunea de scriere, utilizați getsockopt(2) pentru a citi opțiunea SO_ERROR la nivelul SOL_SOCKET pentru a determina dacă connect() s-a finalizat cu succes (SO_ERROR este zero) sau fără succes (SO_ERROR este unul dintre codurile de eroare obișnuite enumerate aici, explicând motivul eșecului).
Apelul de sistem a fost întrerupt de un semnal care a fost capturat; consultați signal(7).
Soclul este deja conectat.
Rețeaua este inaccesibilă
Descriptorul de fișier sockfd nu se referă la un soclu.
Tipul de soclu nu acceptă protocolul de comunicare solicitat. Această eroare poate apărea, de exemplu, la o încercare de conectare a unui soclu de dategramă de domeniu UNIX la un soclu de flux.
Depășire a timpului de așteptare în timpul încercării de conectare. Este posibil ca serverul să fie prea ocupat pentru a accepta noi conexiuni. Rețineți că pentru soclurile IP timpul de așteptare poate fi foarte lung atunci când „syncookies” sunt activate pe server.

STANDARDE

POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD, (connect() a apărut pentru prima dată în 4.2BSD).

NOTE

Pentru informații despre tipul socklen_t, a se vedea accept(2).

Dacă connect() eșuează, considerați starea soclului ca fiind nespecificată. Aplicațiile portabile ar trebui să închidă soclul și să creeze unul nou pentru reconectare.

EXEMPLE

Un exemplu de utilizare a apelului de sistem connect(), este prezentat în getaddrinfo(3).

CONSULTAȚI ȘI

accept(2), bind(2), getsockname(2), listen(2), socket(2), path_resolution(7), selinux(8)

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

4 decembrie 2022 Pagini de manual de Linux 6.03