connect(2) System Calls Manual connect(2) NUME connect - iniiaza o conexiune la un soclu BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); DESCRIERE Apelul de sistem connect() conecteaza soclul menionat de descriptorul de fiier sockfd la adresa specificata de addr. Argumentul addrlen specifica dimensiunea lui addr. Formatul adresei din addr este determinat de spaiul de adresare al soclului sockfd; consultai socket(2) pentru detalii suplimentare. Daca soclul sockfd este de tip SOCK_DGRAM, atunci addr este adresa la care sunt trimise implicit datagramele i singura adresa de la care sunt primite datagramele. Daca soclul este de tip SOCK_STREAM sau SOCK_SEQPACKET, acest apel incearca sa 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 singura data. Unele socluri de protocol (de exemplu, socluri de tip datagrama in 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 datagrama in domeniile UNIX i Internet) pot dizolva asocierea prin conectarea la o adresa cu membrul sa_family din sockaddr definit la AF_UNSPEC; ulterior, soclul poate fi conectat la o alta adresa. (AF_UNSPEC este acceptat incepand cu Linux 2.2.) VALOAREA RETURNATA Daca conexiunea sau asocierea reuete, se returneaza zero. In caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE Urmatoarele 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 ruta: permisiunea de scriere este refuzata pe fiierul soclu sau permisiunea de cautare este refuzata pentru unul dintre directoarele din prefixul caii. A se vedea i path_resolution(7). EACCES EPERM Utilizatorul a incercat sa se conecteze la o adresa de difuzare fara a avea activat fanionul de difuzare al soclului sau solicitarea de conectare a euat din cauza unei reguli de paravan de protecie local. EACCES De asemenea, poate fi returnat daca o politica SELinux a refuzat o conexiune (de exemplu, daca exista o politica care spune ca un proxy HTTP se poate conecta numai la porturile asociate cu servere HTTP, iar proxy-ul incearca sa se conecteze la un port diferit). EADDRINUSE Adresa locala este deja in uz. EADDRNOTAVAIL (Soclurile din domeniul de Internet) Soclul la care se face referire prin sockfd nu a fost asociat anterior unei adrese i, la incercarea de a-l asocia la un port efemer, s-a stabilit ca toate numerele de port din intervalul de porturi efemere sunt utilizate in prezent. A se vedea discuia despre /proc/sys/net/ipv4/ip_local_port_range in ip(7). EAFNOSUPPORT Adresa furnizata nu avea familia de adrese corecta in campul sa_family. EAGAIN Pentru soclurile de domeniu UNIX fara blocare, soclul este fara blocare, iar conexiunea nu poate fi finalizata imediat. Pentru alte familii de socluri, nu exista suficiente intrari in memoria cache de direcionare. EALREADY Soclul este fara blocare i o incercare anterioara de conectare nu a fost inca finalizata. EBADF sockfd nu este un descriptor de fiier deschis valid. ECONNREFUSED Un apel connect() pe un soclu de flux nu a gasit pe nimeni ascultand la adresa de la distana. EFAULT Adresa structurii soclului este in afara spaiului de adrese al utilizatorului. EINPROGRESS Soclul este fara blocare i conexiunea nu poate fi finalizata imediat (soclurile de domeniu UNIX eueaza in schimb cu EAGAIN). Este posibil sa efectuai select(2) sau poll(2) pentru completare selectand soclul pentru scriere. Dupa ce select(2) indica permisiunea de scriere, utilizai getsockopt(2) pentru a citi opiunea SO_ERROR la nivelul SOL_SOCKET pentru a determina daca connect() s-a finalizat cu succes (SO_ERROR este zero) sau fara succes (SO_ERROR este unul dintre codurile de eroare obinuite enumerate aici, explicand motivul eecului). EINTR Apelul de sistem a fost intrerupt de un semnal care a fost capturat; consultai signal(7). EISCONN Soclul este deja conectat. ENETUNREACH Reeaua este inaccesibila ENOTSOCK Descriptorul de fiier sockfd nu se refera la un soclu. EPROTOTYPE Tipul de soclu nu accepta protocolul de comunicare solicitat. Aceasta eroare poate aparea, de exemplu, la o incercare de conectare a unui soclu de dategrama de domeniu UNIX la un soclu de flux. ETIMEDOUT Depaire a timpului de ateptare in timpul incercarii de conectare. Este posibil ca serverul sa fie prea ocupat pentru a accepta noi conexiuni. Reinei ca pentru soclurile IP timpul de ateptare poate fi foarte lung atunci cand ,,syncookies" sunt activate pe server. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4, 4.4BSD, (connect() a aparut pentru prima data in 4.2BSD). NOTE Daca connect() eueaza, considerai starea soclului ca fiind nespecificata. Aplicaiile portabile ar trebui sa inchida soclul i sa creeze unul nou pentru reconectare. EXEMPLE Un exemplu de utilizare a apelului de sistem connect(), este prezentat in getaddrinfo(3). CONSULTAI I accept(2), bind(2), getsockname(2), listen(2), socket(2), path_resolution(7), selinux(8) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.9.1 2 mai 2024 connect(2)