> Linux Reviews > man >

listen


  1. listen.2.man


1. listen.2.man

Manpage of LISTEN

LISTEN

Section: Руководство программиста Linux (2)
Updated: 2008-11-20
Index Return to Main Contents
 

ИМЯ

listen - слушать соединения на сокете  

ОБЗОР

#include <sys/types.h>          /* Смотрите ЗАМЕЧАНИЯ */

#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 устанавливается в соответствующее значение.  

ОШИБКИ

EADDRINUSE
Другой сокет уже слушает на этом же порту.
EBADF
Аргумент sockfd не является допустимым дескриптором.
ENOTSOCK
Аргумент sockfd не является сокетом.
EOPNOTSUPP
Тип сокета не поддерживает операцию listen().
 

СООТВЕТСТВИЕ СТАНДАРТАМ

4.4BSD, POSIX.1-2001. Вызов listen() впервые появился в 4.2BSD.  

ЗАМЕЧАНИЯ

Для принятия соединений должны быть выполнены следующие шаги:
1.
Создать сокет с помощью socket(2).
2.
Привязать сокет к локальному адресу с помощью bind(2) для того, чтобы к нему можно было подключать другие сокеты с помощью connect(2).
3.
Подготовиться к приёму входящий подключений и настроить размер очереди входящих подключений с помощью listen().
4.
Принять подключения с помощью accept(2).

В POSIX.1-2001 не требуется включение <sys/types.h>, и этот заголовочный файл не требуется в Linux. Однако, некоторые старые (BSD) реализации требуют данный файл, и в переносимых приложениях для предосторожности, вероятно, он будет включён.

Поведение аргумента backlog на TCP-сокетах изменилось в Linux 2.2. Теперь вместо количества неоконченных запросов на соединение он задает размер очереди для полностью (completely) установленных соединений, ожидающих, пока процесс примет их. Максимальный размер очереди для неполных сокетов может быть задан через /proc/sys/net/ipv4/tcp_max_syn_backlog. Когда разрешено использование syncookies, логический максимальный размер отсутствует и эта настройка игнорируется. Подробности см. в tcp(7).

Если значение аргумента backlog больше, чем значение /proc/sys/net/core/somaxconn, то он без предупреждения обрезается до этой величины; значение по умолчанию в данном файле равно 128. В ядрах до версии 2.4.25, этот предел указывался в константе SOMAXCONN и имел значение 128.  

ПРИМЕР

См. bind(2).  

СМОТРИТЕ ТАКЖЕ

accept(2), bind(2), connect(2), socket(2), socket(7)


 

Index

ИМЯ
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СООТВЕТСТВИЕ СТАНДАРТАМ
ЗАМЕЧАНИЯ
ПРИМЕР
СМОТРИТЕ ТАКЖЕ

This document was created by man2html using the manual pages.
Time: 17:41:24 GMT, October 23, 2013

SVENSKA - cs - SVENSKA - SVENSKA - SVENSKA - ja