table of contents
LISTEN(2) | Linux - příručka programátora | LISTEN(2) |
JMÉNO¶
listen - čekej na spojení na soketu
SYNTAXE¶
#include <sys/types.h> /*viz POZNÁMKY*/ #include <sys/socket.h>
int listen(int sockfd, int backlog);
POPIS¶
Funkce listen(2) označí soket specifikovaný parametrem sockfd jako pasivní, to znamená, že soket bude použit pro přijetí požadavků příchozích spojení pomocí funkce accept (2).
Parametr sockfd je file deskriptor, který popisuje soket, který je typu SOCK_STREAM nebo SOCK_SEQPACKET.
Parametr backlog specifikuje maximální délku, do které fronta čekajících požadavků na spojení prostřednictvím sockfd může dorůst. Je-li fronta zaplněna, obdrží klient zprávu ECONNREFUSEDnebopokudtonižšívrstvapodporujeznovuzaslání, požadavek může být ignorován a pozdější pokus o spojení uspěje.
NÁVRATOVÁ HODNOTA¶
V případě úspěchu je vrácena nula, jinak -1 a je příslušně nastavena proměnná errno
CHYBY¶
- EADDRINUSE
- Jiný soket už naslouchá na daném portu. EBADF Argument sockfd není platným deskriptorem.
- ENOTSOCK
- Argument ssockfd není deskriptorem soketu.
- EOPNOTSUPP
- Typ soketu není podporován voláním listen.
SPLŇUJE STANDARDY¶
4.4BSD, POSIX.1-2001. Volání listen se poprvé objevilo v 4.2BSD.
POZNÁMKY¶
K přijetí spojení jsou provedeny tyto kroky:
- 1.
- Je vytvořen soket pomocí socket(2).
- 2.
- Soket je navázán na lokální adresu
pomocí bind(2), takže další sokety na
něj mohou být napojeny pomocí connect(2).
- 3.
- Ochota k přijetí příchozího
spojení a limit pro délku fronty jsou specifikovány
pomocí listen ().
- 4.
- Spojení je přijato pomocí accept (2).
POSIX.1-2001 nevyžaduje vložení <sys/types.h> a tento hlavičkový soubor není vyžadován ani v Linuxu. Nicméně některé starší (BSD) implementace vyžadují tento soubor a proto by měl být vložen do přenositelných aplikací.
Chování argumentu backlog na TCP soketech se změnilo v Linuxu 2.2. Nyní specifikuje délku fronty pro kompletně zařízený soket čekající na přijetí, místo počtu nekompletních požadavků na spojení. Maximální délka fronty nekompletního soketu může být nastavena pomocí tcp_max_syn_backlog sysctl. Pokud jsou syncookies povoleny není logicky žádná maximální délka a toto sysctl nastavení je ignorováno. Viz tcp(7) pro více informací.
Pokud je backlog argument větší než hodnota v /proc/sys/ net/core/somaxconn, pak je tiše oříznuta na tuto hodnotu. implicitní hodnota je 128. V jádrech starších než 2.4.25 bylo tato hodnota pevně stanovena na 128.
PŘÍKLAD¶
Viz bind(2).
DALŠÍ INFORMACE¶
accept(2), bind"(2), connect (2), socket (2)
TIRÁŽ¶
Tato stránka je součástí projektu Linux man-pages. Popis projektu a informace o hlášení chyb najdete na http://www.kernel.org/doc/man-pages/.
23.září 2009 | BSD Man Page |