Назва

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.

Дивіться також

accept(2), ?connect(2), socket(2)