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¶
Uwaga! To tłumaczenie może być nieaktualne!
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)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 2 connect
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.