Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       connect - inicjuje połączenie poprzez gniazdo

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <sys/socket.h>

       int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);

OPIS

       Wywołanie systemowe connect()  łączy gniazdo określone deskryptorem pliku sockfd z adresem
       podanym jako addr. Argument addrlen określa rozmiar addr. Format  adresu  addr  zależy  od
       przestrzeni adresowej gniazda sockfd; więcej szczegółów w podręczniku socket(2).

       Jeśli  gniazdo  sockfd  jest  typu  SOCK_DGRAM,  to  adres  addr  jest adresem, do którego
       domyślnie przesyłane są datagramy i jedynym adresem, z  którego  datagramy  są  odbierane.
       Jeśli  gniazdo  jest typu SOCK_STREAM lub SOCK_SEQPACKET, to to wywołanie próbuje nawiązać
       połączenie z gniazdem skojarzonym z adresem podanym w addr.

       Gniazda niektórych protokołów (np. gniazda strumieniowe dziedziny Uniksa)  mogą  pomyślnie
       połączyć się za pomocą connect() tylko raz.

       Gniazda  niektórych  protokołów (np. gniazda datagramowe w dziedzinach Uniksa i Internetu)
       mogą użyć connect() wielokrotnie, aby zmienić swoje przypisanie.

       Gniazda niektórych protokołów (np. gniazda TCP  oraz  gniazda  datagramowe  w  dziedzinach
       Uniksa  i Internetu) mogą zniszczyć powiązanie przez łączenie się z adresem, w którym pole
       sa_family struktury sockaddr ma wartość AF_UNSPEC;  następnie  gniazdo  można  połączyć  z
       innym adresem (AF_UNSPEC jest obsługiwane od Linuksa 2.2).

WARTOŚĆ ZWRACANA

       Jeśli połączenie lub przywiązanie uda się, zwracane jest zero. Przy błędzie, zwracane jest
       -1 i ustawiane jest errno wskazując błąd.

BŁĘDY

       Następujące  błędy  to  jedynie  ogólne  błędy  gniazd.  Mogą  występować  również   inne,
       specyficzne dla domeny kody błędów.

       EACCES W przypadku gniazd domeny Uniksa identyfikowanych ścieżką: Odmówiono uprawnienia do
              zapisu pliku gniazda lub odmówiono uprawnienia wyszukania dla jednego z katalogów w
              ścieżce (zob. też path_resolution(7)).

       EACCES
       EPERM  Użytkownik  próbował  podłączyć  się  do  adresu  rozgłoszeniowego  (broadcast) bez
              włączonego znacznika „broadcast” dla gniazda lub też połączenie  nie  udało  się  z
              powodu lokalnej reguły zapory sieciowej.

       EACCES Błąd  może  być  zwrócony  również  gdy reguły SELinux odmówiły połączenia (np. gdy
              istnieje reguła określająca, że pośrednik HTTP może połączyć  się  tylko  z  portem
              przypisanym serwerom HTTP, a pośrednik próbuje połączyć się z innym portem).

       EADDRINUSE
              Adres lokalny już jest wykorzystywany.

       EADDRNOTAVAIL
              (gniazda domeny Internet)  Gniazdo określone w sockfd nie było wcześniej skojarzone
              z adresem i przy próbie skojarzenia z portem  dynamicznym  (efemerycznym),  okazało
              się,  że  wszystkie  numery  portów  w  zakresie  portów  dynamicznych są aktualnie
              używane. Więcej informacji w opisie pliku /proc/sys/net/ipv4/ip_local_port_range  w
              podręczniku ip(7).

       EAFNOSUPPORT
              Przekazany adres nie miał prawidłowej rodziny adresów w swoim polu sa_family.

       EAGAIN W  przypadku  nieblokujących  gniazd  domeny  Uniksa:  gniazdo jest nieblokujące, a
              połączenie nie może być natychmiast zestawione. W przypadku gniazd z innych rodzin:
              istnieje niewystarczająca liczba wpisów w buforze trasowania.

       EALREADY
              Gniazdo jest nieblokujące, a poprzednia próba połączenia nie została zakończona.

       EBADF  sockfd nie jest prawidłowym indeksem tablicy deskryptorów.

       ECONNREFUSED
              connect()  w przypadku gniazda strumieniowego nie znalazło nikogo nasłuchującego na
              zdalnym adresie.

       EFAULT Adres struktury gniazda znajduje się poza przestrzenią adresową użytkownika.

       EINPROGRESS
              Gniazdo jest nieblokujące, a połączenie nie może  zostać  zrealizowane  natychmiast
              (gniazda  domeny Uniksa zwracają wówczas inny błąd: EAGAIN). Jest możliwe wykonanie
              select(2) lub poll(2) w celu dokończenia poprzez wybranie  gniazda  do  zapisu.  Po
              tym,  jak  select(2)  wskaże zapisywalność, należy użyć getsockopt(2), aby odczytać
              opcję SO_ERROR z poziomu SOL_SOCKET w celu określenia, czy connect() zakończyło się
              pomyślnie  (SO_ERROR  będzie  zerem)  lub  niepomyślnie  (SO_ERROR będzie jednym ze
              typowych, wymienionych powyżej kodów błędów, wyjaśniających przyczynę błędu).

       EINTR  Wywołanie systemowe zostało przerwane przechwyconym sygnałem; zob. signal(7).

       EISCONN
              Gniazdo już jest połączone.

       ENETUNREACH
              Sieć jest nieosiągalna.

       ENOTSOCK
              Deskryptor pliku sockfd nie odnosi się do gniazda.

       EPROTOTYPE
              Typ gniazda nie obsługuje żądanego protokołu komunikacji. Błąd  ten  może  wystąpić
              np.   przy  próbie  połączenia  gniazda  datagramowego  domeny  Uniksa  z  gniazdem
              strumieniowym.

       ETIMEDOUT
              Przeterminowanie próby połączenia. Serwer może być zbyt zajęty, aby przyjmować nowe
              połączenia.  Dla  gniazd  IP  czas  przeterminowania  może być bardzo długi, gdy na
              serwerze włączone są „syncookies”.

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001, SVr4, 4.4BSD (connect() pojawiło się pierwotnie w 4.2BSD).

UWAGI

       Jeśli connect() zawiedzie, należy uznać stan gniazda za nieokreślony. Przenośne  aplikacje
       powinny zamknąć gniazdo i utworzyć nowe w celu ponownego połączenia.

PRZYKŁADY

       Przykładowe użycie connect() pokazano w getaddrinfo(3).

ZOBACZ TAKŻE

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

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony  podręcznika  są:  Przemek  Borys
       <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i  Michał  Kułach
       <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją. Bliższe informacje o warunkach licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   lub   nowszej.   Nie  przyjmuje  się  ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.