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

ИМЯ

       listen - слушать соединения на сокете

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <sys/socket.h>

       int listen(int sockfd, int backlog);

ОПИСАНИЕ

       Вызов  listen()  помечает  сокет,  указанный  в  sockfd  как пассивный, то есть как сокет,
       который будет использоваться для приёма запросов входящих соединений с помощью accept(2).

       Аргумент  sockfd  является  файловым  дескриптором,  который  ссылается  на   сокет   типа
       SOCK_STREAM или SOCK_SEQPACKET.

       Аргумент  backlog  задает  максимальный  размер, до которого может расти очередь ожидающих
       соединений у sockfd. Если приходит запрос на соединение, а очередь полна, то клиент  может
       получить  ошибку  с  указание  ECONNREFUSED  или,  если  низлежащий  протокол поддерживает
       повторную передачу, запрос может быть игнорирован, чтобы попытаться соединиться позднее.

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

       On success, zero is returned.  On error, -1 is returned, and errno is set to indicate  the
       error.

ОШИБКИ

       EADDRINUSE
              Другой сокет уже слушает на этом же порту.

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

       EBADF  Аргумент sockfd не является допустимым файловым дескриптором.

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

       EOPNOTSUPP
              Тип сокета не поддерживает операцию listen().

СТАНДАРТЫ

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

ЗАМЕЧАНИЯ

       Для принятия соединений должны быть выполнены следующие шаги:

           (1)  Создать сокет с помощью socket(2).

           (2)  Привязать сокет к локальному адресу с помощью bind(2)  для  того,  чтобы  к  нему
                можно было подключать другие сокеты с помощью connect(2).

           (3)  Подготовиться  к  приёму входящий подключений и настроить размер очереди входящих
                подключений с помощью listen().

           (4)  Принять подключения с помощью accept(2).

       Поведение  аргумента  backlog  на  TCP-сокетах  изменилось  в  Linux  2.2.  Теперь  вместо
       количества  неоконченных  запросов  на  соединение  он задает размер очереди для полностью
       (completely) установленных соединений, ожидающих, пока  процесс  примет  их.  Максимальный
       размер     очереди     для     неполных     сокетов     может     быть     задан     через
       /proc/sys/net/ipv4/tcp_max_syn_backlog.   Когда   разрешено   использование    syncookies,
       логический максимальный размер отсутствует и эта настройка игнорируется. Подробности см. в
       tcp(7).

       If the backlog argument is greater than the value in /proc/sys/net/core/somaxconn, then it
       is  silently  capped to that value.  Since Linux 5.4, the default in this file is 4096; in
       earlier kernels, the default value is 128.  Before Linux 2.4.25, this  limit  was  a  hard
       coded value, SOMAXCONN, with the value 128.

ПРИМЕРЫ

       См. bind(2).

СМ. ТАКЖЕ

       accept(2), bind(2), connect(2), socket(2), socket(7)

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан    Artyom    Kunyov
       <artkun@guitarplayer.ru>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh
       <d20052005@yandex.ru>,  Katrin  Kutepova  <blackkatelv@gmail.com>, Konstantin Shvaykovskiy
       <kot.shv@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⟩.