Provided by: manpages-pl-dev_20060617-1_all bug

NAZWA

       connect - inicjalizacja połączenia poprzez gniazdo

SKŁADNIA

       #include <sys/types.h>
       #include <sys/socket.h>

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

OPIS

       Deskryptor sockfd musi odnosić się do gniazda.  Jeśli gniazdo jest typu
       SOCK_DGRAM,  to  adres  serv_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
       ta funkcja próbuje nawiązać połączenie z innym gniazdem.  Inne  gniazdo
       jest  podane  jako  serv_addr,  co  jest adresem (o długości addrlen) w
       przestrzeni komunikacyjnej gniazda. Każda z przestrzeni komunikacyjnych
       interpretuje serv_addr, po swojemu.

       Ogólnie,  gniazda  strumieniowe  (dla  protokołów  połączeniowych) mogą
       pomyślnie  wykonać  connect  tylko  raz;   gniazda   datagramowe   (dla
       protokołów  bezpołączeniowych)  mogą  używać  connect  wielokrotnie  do
       zmiany  swojego  przypisania.  Gniazda   datagramowe   mogą   zniszczyć
       powiązanie  przez  łączenie  się  z  adresem,  w  którym pole sa_family
       struktury sockaddr ma wartość AF_UNSPEC.

WARTOŚĆ ZWRACANA

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

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.

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

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

       ENOTSOCK
              Deskryptor nie jest związany z gniazdem.

       EISCONN
              Gniazdo już jest połączone.

       ECONNREFUSED
              Żaden serwer nie nasłuchuje na zdalnym adresie.

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

       ENETUNREACH
              Sieć jest nieosiągalna.

       EADDRINUSE
              Adres lokalny już jest wykorzystywany.

       EINPROGRESS
              Gniazdo  jest  nieblokujące,  a  połączenie  nie   może   zostać
              zrealizowane  natychmiast.  Jest możliwe wykonanie select(2) lub
              poll(2) w celu dokończenia poprzez wybranie gniazda  do  zapisu.
              Po   tym,   jak   select   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).

       EALREADY
              Gniazdo jest nieblokujące, a  poprzednia  próba  połączenia  nie
              została  zakończona.   EAGAIN Brak wolnych portów lokalnych, lub
              brak wpisów w buforze marszrutowym. Dla PF_INET w opisie  sysctl
              net.ipv4.ip_local_port_range  w  ip(7)  opisano,  jak  zwiększyć
              liczbę portów lokalnych.

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

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

ZGODNE Z

       SVr4, 4.4BSD (funkcja connect pojawiła się pierwotnie w BSD 4.2).  SVr4
       dokumentuje dodatkowe błędy ogólne EADDRNOTAVAIL, EINVAL, EAFNOSUPPORT,
       EALREADY,  EINTR,  EPROTOTYPE  i  ENOSR.    Dokumentuje   także   wiele
       dodatkowych błędów tutaj nieopisanych.

UWAGA

       Trzeci  argument  connect  jest w rzeczywistości typu int (i tak jest w
       BSD 4.*, libc4 i libc5).  Pewne zamieszanie w POSIX  doprowadziło  jego
       zmiany  na  obecny  socklen_t.   Szkic  standardu  nie  został  jeszcze
       przyjęty, ale glibc2 już jest z nim zgodne i zawiera również socklen_t.
       Zobacz także accept(2).

USTERKI

       Rozłączanie  gniazda  poprzez wywołanie connect z adresem AF_UNSPEC nie
       jest jeszcze wspierane.

ZOBACZ TAKŻE

       accept(2), bind(2), listen(2), socket(2), getsockname(2)