Provided by:
manpages-pl-dev_20051117-1_all 
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)