Provided by: manpages-ru_0.98-4_all bug

НАЗВАНИЕ

       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