Provided by:
manpages-ru_0.98-4_all 
НАЗВАНИЕ
connect - инициирует соединение на сокете
ОБЗОР
#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t
addrlen);
ОПИСАНИЕ
Файловый дескриптор sockfd должен ссылаться на сокет. Если сокет имеет
тип SOCK_DGRAM, значит, адрес serv_addr является адресом по умолчанию,
куда посылаются датаграммы, и единственным адресом, откуда они
принимаются. Если сокет имеет тип SOCK_STREAM или SOCK_SEQPACKET, то
данный системный вызов попытается установить соединение с другим
сокетом. Другой сокет задан параметром serv_addr, являющийся адресом
длиной addrelen в пространстве коммуникации сокета. Каждое
пространство коммуникации интерпретирует параметр serv_addr по-своему.
Обычно сокеты с протоколами, основанными на соединении, могут
устанавливать соединение только один раз; сокеты с протоколами без
соединения могут использовать connect многократно, чтобы изменить адрес
назначения. Сокеты без поддержки соединения могут прекратить связь с
другим сокетом, установив член sa_family структуры sockaddr в
AF_UNSPEC.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Если соединение или привязка прошла успешно, возвращается нуль. При
ошибке возвращается -1, а errno устанавливается должным образом.
ОШИБКИ
Ниже следуют только общие ошибки сокетов. Могут также появляться коды
ошибок, существующие в конкретном домене.
EBADF Файловый дескриптор не является правильными индексом в таблице
дескрипторов.
EFAULT Адрес структуры сокета находится за пределами адресного
пространства пользователя.
ENOTSOCK
Файловый дескриптор не связан с сокетом.
EISCONN Соединение на сокете уже произошло.
ECONNREFUSED
С той стороны никто не слушает.
ETIMEDOUT
Произошел тайм-аут во время ожидания соединения. Сервер,
возможно, очень занят и не может принимать новые соединения.
Заметьте, что для IP-сокетов тайм-аут может быть очень длинным,
если на сервере разрешено использование syncookies.
ENETUNREACH
Сеть недоступна.
EADDRINUSE
Локальный адрес уже используется.
EINPROGRESS
Сокет является неблокирующим, а соединение не может быть
установлено прямо сейчас. Можно использовать select(2) или
poll(2), чтобы закончить соединение, установив ожидание
возможности записи в сокет. После того, как select сообщит о
такой возможности, используйте getsockopt(2), чтобы прочитать
флаг SO_ERROR на уровне SOL_SOCKET, чтобы определить, успешно
ли завершился connect (в этом случае SO_ERROR равен нулю) или
неуспешно, тогда SO_ERROR равен одному из обычных кодов ошибок,
перечисленных здесь, и объясняет причину неудачи).
EALREADY
Сокет является неблокирующим, а предыдущая попытка установить
соединение еще не завершилась.
EAGAIN Не осталось свободных локальных портов, или же недостаточно
места в кэше маршрутизации. Для домена PF_INET смотри описание
системной переменной net.ipv4.ip_local_port_range в ip(7), где
описано, как увеличить количество локальных портов.
EAFNOSUPPORT
Адрес имеет некорректную семью адресов в поле sa_family.
EACCES, EPERM
Пользователь попытался соединиться с широковещательным адресом,
не установив широковещательный флаг на сокете или же запрос на
соединение завершился неуспешно из-за локального правила на
файерволле.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.4BSD (функция connect впервые появилась в BSD 4.2). SVr4
документирует дополнительные общие коды ошибок EADDRNOTAVAIL, EINVAL,
EAFNOSUPPORT, EALREADY, EINTR, EPROTOTYPE, и ENOSR. Там также
документируется множество дополнительных кодов ошибок, не описанных
здесь.
ЗАМЕЧАНИЕ
Третий аргумент connect в действительности имеет тип int (а в BSD 4.*,
libc4 и libc5 это так и есть). Определенное недопонимание привело к
появлению socklen_t. Черновик стандарта еще не принят, но glibc2 уже
следует ему и в ней присутствует socklen_t. Смотри также accept(2).
ОШИБКИ
Прекращение соединения на сокете с помощью вызова connect с адресом
AF_UNSPEC еще не реализовано.
СМОТРИ ТАКЖЕ
accept(2), bind(2), listen(2), socket(2), getsockname(2)
ПЕРЕВОД
Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999