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.

EACCES
    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).

EACCES
EPERM
    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.

EACCES
    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).

EADDRINUSE
    Adresa locală este deja în uz.

EADDRNOTAVAIL
    (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).

EAFNOSUPPORT
    Adresa furnizată nu avea familia de adrese corectă în câmpul sa_family.

EAGAIN
    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.

EALREADY
    Soclul este fără blocare și o încercare anterioară de conectare nu a fost încă finalizată.

EBADF
    sockfd nu este un descriptor de fișier deschis valid.

ECONNREFUSED
    Un apel connect() pe un soclu de flux nu a găsit pe nimeni ascultând la adresa de la distanță.

EFAULT
    Adresa structurii soclului este în afara spațiului de adrese al utilizatorului.

EINPROGRESS
    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).

EINTR
    Apelul de sistem a fost întrerupt de un semnal care a fost capturat; consultați signal(7).

EISCONN
    Soclul este deja conectat.

ENETUNREACH
    Rețeaua este inaccesibilă.

ENOTSOCK
    Descriptorul de fișier sockfd nu se referă la un soclu.

EPROTOTYPE
    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.

ETIMEDOUT
    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.

VERSIUNI
Programele portabile trebuie să se asigure că addr.sun_path este un șir terminat cu nul pentru soclurile AF_UNIX.

STANDARDE
POSIX.1-2024.

ISTORIC
POSIX.1-2001, SVr4, 4.2BSD.

NOTE
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.