Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Стандартная библиотека языка C (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.

       Некоторые протокольные сокеты (например, потоковые сокеты домена UNIX)  могут  успешно  connect()  только
       один раз.

       Некоторые  протокольные  сокеты  (например,  датаграммные  сокеты  в  доменах  UNIX  и  Интернета)  могут
       использовать connect() несколько раз для изменения своейассоциации.

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

ИСТОРИЯ

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

ПРИМЕЧАНИЯ

       Если вызов 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> и Kirill
       Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                       connect(2)