Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

       connect - инициирует соединение на сокете

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <sys/socket.h>

       int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);

ОПИСАНИЕ

       Системный   вызов   connect()   устанавливает  соединение  с  сокетом,  заданным  файловый
       дескриптором sockfd, ссылающимся на адрес addr. Аргумент addrlen определяет  размер  addr.
       Формат  адреса  в  addr определяется адресным пространством сокета sockfd; подробнее можно
       узнать в socket(2).

       Если сокет sockfd имеет тип SOCK_DGRAM, то адрес addr является адресом по умолчанию,  куда
       посылаются  датаграммы,  и единственным адресом, откуда они принимаются.  Если сокет имеет
       тип SOCK_STREAM или  SOCK_SEQPACKET,  то  данный  системный  вызов  попытается  установить
       соединение с другим сокетом, заданным параметром addr.

       Some protocol sockets (e.g., UNIX domain stream sockets)  may successfully connect()  only
       once.

       Some protocol sockets (e.g., datagram sockets in the UNIX and Internet domains)   may  use
       connect()  multiple times to change their association.

       Some  protocol  sockets  (e.g.,  TCP  sockets  as well as datagram sockets in the UNIX and
       Internet domains)  may dissolve the association by  connecting  to  an  address  with  the
       sa_family  member of sockaddr set to AF_UNSPEC; thereafter, the socket can be connected to
       another address.  (AF_UNSPEC is supported since Linux 2.2.)

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       If the connection or binding succeeds, zero is returned.  On error, -1  is  returned,  and
       errno is set to indicate the error.

ОШИБКИ

       Ниже   приведены  только  общие  ошибки  сокетов.  Могут  также  появляться  коды  ошибок,
       существующие в конкретном домене.

       EACCES Для доменных сокетов UNIX, которые идентифицируются по  имени  пути:  нет  прав  на
              запись  в  файл  сокета,  или  в одном из каталогов пути запрещён поиск. (См. также
              path_resolution(7).)

       EACCES, EPERM
              Пользователь  попытался  соединиться  с  широковещательным  адресом,  не  установив
              широковещательный  флаг  на  сокете или же запрос на соединение завершился неудачно
              из-за правила локального межсетевого экрана.

       EACCES It can also be returned if an SELinux policy denied a connection (for  example,  if
              there  is  a  policy saying that an HTTP proxy can only connect to ports associated
              with HTTP servers, and the proxy tries to connect to a different port).

       EADDRINUSE
              Локальный адрес уже используется.

       EADDRNOTAVAIL
              (доменные сокеты Интернета) Сокет, указанный sockfd, ранее не был привязан к адресу
              и при попытке привязать его к эфемеридному порту, было определено, что все номера в
              диапазоне   эфемеридных    портов    уже    используются.    Смотрите    обсуждение
              /proc/sys/net/ipv4/ip_local_port_range в ip(7).

       EAFNOSUPPORT
              Адрес имеет некорректное семейство адресов в поле sa_family.

       EAGAIN Для  неблокирующих доменных сокетов UNIX сокет не блокируется и соединение не может
              быть выполнено  немедленно.  Для  других  семейств  сокетов  в  кэше  маршрутизации
              недостаточно элементов.

       EALREADY
              Сокет  является  неблокирующим,  а  предыдущая попытка установить соединение ещё не
              завершилась.

       EBADF  Значение sockfd не является правильным открытым файловым дескриптором.

       ECONNREFUSED
              Вызов connect() не нашёл слушающий удалённый адрес для потокового сокета.

       EFAULT Адрес  структуры  сокета  находится  за   пределами   пользовательского   адресного
              пространства.

       EINPROGRESS
              Сокет  является  неблокирующим,  а  соединение не может быть установлено немедленно
              (доменные сокеты UNIX вместо этого возвращают ошибку  EAGAIN).  Можно  использовать
              select(2)  или  poll(2), чтобы закончить соединение, установив ожидание возможности
              записи в сокет. После того, как select(2) сообщит о такой возможности,  используйте
              getsockopt(2),   чтобы   прочитать   флаг  SO_ERROR  на  уровне  SOL_SOCKET,  чтобы
              определить, успешно ли завершился connect() (в этом случае SO_ERROR равен нулю) или
              неудачно (тогда SO_ERROR равен одному из обычных кодов ошибок, перечисленных здесь,
              и объясняет причину неудачи).

       EINTR  Системный вызов был прерван пойманным сигналом; см. signal(7).

       EISCONN
              Соединение на сокете уже произошло.

       ENETUNREACH
              Сеть недоступна.

       ENOTSOCK
              Файловый дескриптор sockfd указывает не на каталог.

       EPROTOTYPE
              Тип сокета  не  поддерживается  запрошенным  протоколом  связи.  Это  ошибка  может
              возникать  при  попытке  подключить  доменный  датаграммный сокет UNIX к потоковому
              сокету.

       ETIMEDOUT
              Произошел тайм-аут во время ожидания соединения. Сервер, возможно, очень занят и не
              может  принимать новые соединения. Заметьте, что для IP-сокетов тайм-аут может быть
              очень длинным, если на сервере разрешено использование syncookies.

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD, (connect() впервые появился 4.2BSD).

ЗАМЕЧАНИЯ

       Описание типа socklen_t смотрите в accept(2).

       Если вызов connect() завершается с ошибкой, то состояние сокета считается  неопределённым.
       Переносимые приложения должны закрывать сокет и для переподключения создавать новый.

ПРИМЕРЫ

       Пример использования connect() показан в getaddrinfo(3).

СМ. ТАКЖЕ

       accept(2), bind(2), getsockname(2), listen(2), socket(2), path_resolution(7), selinux(8)

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан   Azamat   Hackimov
       <azamat.hackimov@gmail.com>, Dmitriy  S.  Seregin  <dseregin@59.ru>,  Dmitry  Bolkhovskikh
       <d20052005@yandex.ru>,    Katrin    Kutepova    <blackkatelv@gmail.com>,    Yuri    Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.