ИМЯ

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 <[email protected]>, Azamat Hackimov <[email protected]>, Dmitry Bolkhovskikh <[email protected]>, Katrin Kutepova <[email protected]>, Konstantin Shvaykovskiy <[email protected]>, Yuri Kozlov <[email protected]> и Иван Павлов <[email protected]>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]

Recommended readings

Pages related to listen you should read also: