listen - прослушивает соединения на сокете
НАЗВАНИЕlisten - прослушивает соединения на сокете
СИНТАКСИС
#include
int listen(int s, int backlog);
ОПИСАНИЕ
Для того, чтобы принимать соединения, сначала необходимо
создать сокет с помощью функции socket(2), затем показать
готовность принимать соединения и задать лимит входящих
соединений с помощью listen, и только после этого
принимать соединения с помощью accept(2). Системный вызов
listen посылается только к сокетам типа SOCK_STREAM или
SOCK_SEQPACKET.
Параметр backlog определяет максимальную длину очереди
ожидающих соединений. Если приходит запрос на соединение,
а очередь в этот момент полна, то в этом случае клиент
получит сообщение об ошибке ECONNREFUSED или, если
основной протокол поддерживает повторную передачу данных,
запрос может быть проигнорирован, чтобы была возможность
попытаться ответить на повторный запрос.
ЗАМЕЧАНИЯ
Начиная с версии Linux 2.2, поведение параметра backlog на
TCP-сокетах изменилось. Теперь вместо числа неоконченных
запросов он определяет очередь полностью установленных
сокетов, ожидающих, пока процесс примет их. Максимальная
длина очереди сокетов, установленных не полностью, может
быть задана параметром tcp_max_syn_backlog с помощью
sysctl. Когда разрешено использование syncookies,
логическая максимальная длина не указана и этот параметр,
установленный sysctl, игнорируется. Для более подробной
информации смотрите tcp(7).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном завершении вызова возвращаемое значение равно
нулю. В случае ошибки возвращается -1, и переменной errno
присваивается номер ошибки.
КОДЫ ОШИБОК
EADDRINUSE
Другой сокет уже привязан к этому порту.
EBADF Параметр s не является правильным описателем.
ENOTSOCK
Параметр s не является сокетом.
EOPNOTSUPP
Тип сокета не поддерживает операцию listen.
СООТВЕТСТВИЕ СТАНДАРТАМ
Single Unix, 4.4BSD, POSIX 1003.1g draft. Впервые
системный вызов listen появился в 4.2BSD.
НАЙДЕННЫЕ ОШИБКИ
Если сокет имеет тип AF_INET, а аргумент backlog больше,
чем константа SOMAXCONN (128 в Linux 2.0 и 2.2), то он
"обрезается" до SOMAXCONN. Не полагайтесь на это значение
при создании переносимых в другие системы приложений,
потому что BSD (и некоторые её потомки) ограничивает
размер очереди до 5.