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