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