listen - слушать
соединения
на сокете
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]