| listen(2) | System Calls Manual | listen(2) |
listen - слушать соединения на сокете
Стандартная библиотека языка C (libc, -lc)
#include <sys/socket.h>
int listen(int sockfd, int backlog);
Вызов listen() помечает сокет, указанный в sockfd как пассивный, то есть как сокет, который будет использоваться для приёма запросов входящих соединений с помощью accept(2).
Аргумент sockfd является файловым дескриптором, который ссылается на сокет типа SOCK_STREAM или SOCK_SEQPACKET.
Аргумент backlog задает максимальный размер, до которого может расти очередь ожидающих соединений у sockfd. Если приходит запрос на соединение, а очередь полна, то клиент может получить ошибку с указание ECONNREFUSED или, если низлежащий протокол поддерживает повторную передачу, запрос может быть игнорирован, чтобы попытаться соединиться позднее.
При успешном выполнении возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.
POSIX.1-2008.
POSIX.1-2001, 4.4BSD (впервые появились в 4.2BSD).
Для принятия соединений должны быть выполнены следующие шаги:
Поведение аргумента backlog на TCP-сокетах изменилось в Linux 2.2. Теперь вместо количества неоконченных запросов на соединение он задает размер очереди для полностью (completely) установленных соединений, ожидающих, пока процесс примет их. Максимальный размер очереди для неполных сокетов может быть задан через /proc/sys/net/ipv4/tcp_max_syn_backlog. Когда разрешено использование syncookies, логический максимальный размер отсутствует и эта настройка игнорируется. Подробности см. в tcp(7).
Если аргумент backlog больше значения в /proc/sys/net/core/somaxconn, то он молча ограничивается этим значением. Начиная с Linux 5.4, значение по умолчанию в этом файле равно 4096; в более ранних ядрах значение по умолчанию равно 128. До Linux 2.4.25 это ограничение было жестко закодированным значением SOMAXCONN со значением 128.
См. bind(2).
Русский перевод этой страницы руководства разработал(и) 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> и Kirill Rekhov <krekhov.dev@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 2 мая 2024 г. | Справочные страницы Linux 6.9.1 |