Назва
listen - прослуховує сполучення на сокеті
Синтаксис
#include <sys/socket.h>
іnt listen(іnt s, int backlog);
Опис
Для того, щоб приймати з'єднання, необхідно спочатку створити сокет за допомогою функції socket(2), потім показати готовність приймати з'єднання і встановити обмеження вхідних з'єднань за допомогою listen, і тільки після цього приймати з'єднання за допомогою accept(2). Системний виклик listen можна послати лише до сокетам типу SOCK_STREAM або SOCK_SEQPACKET.
Параметр backlog визначає максимальну довжину черги з'єднань. Якщо приходить запит на з'єднання, а черга в цей момент повна, то в цьому випадку клієнт отримає повідомлення про помилку ECONNREFUSED або, якщо використовуваний протокол підтримує повторну передачу даних, запит може бути зігноровано, щоб спробувати відповісти на повторний запит пізніше.
Примітки
Починаючи з версії Lіnux 2.2, поведінка параметра backlog на TCP-сокетах помінялась. Тепер замість числа незакінчених запитів він визначає чергу повністю встановлених сокетів, очікуючих, доки процес прийме їх. Максимальна довжина черги сокетів, частково встановлених, може бути задана параметром tcp_max_syn_backlog за допомогою sysctl. Якщо дозволене використання syncookies, логічна максимальна довжина не використовується і цей sysctl-параметр ігнорується. Для докладнішої інформації дивіться ?tcp(7).
Повернене значення
Успішне завершення виклику поверне нуль. У випадку помилки повертається -1, а змінній errno присвоюється номер помилки.
Коди помилок
EADDRІNUSE : Інший сокет уже слухає на цьому порту.
EBADF : Аргумент s не являється чинним дескриптором.
ENOTSOCK : Параметр s не є сокетом.
EOPNOTSUPP : Цей тип сокету не підтримує операції listen.
Відповідність стандартам
Sіngle Unix, 4.4BSD, чернетка POSІX 1003.1g. Уперше системний виклик listen з'явився у 4.2BSD.
Помилки
Якщо сокет є AFІNET типу, а аргумент backlog_ є більшим ніж константа SOMAXCONN (128 у Lіnux 2.0 і 2.2), то він стинається до SOMAXCONN . Не покладайтеся на це значення при створенні сумісних з іншими системами додатків, тому що BSD (і деякі похідні системи) обмежує розмір черги до 5.