Rechercher une page de manuel

Chercher une autre page de manuel:

listen

Autres langues

Langue: ja

Version: 1993-07-23 (mandriva - 01/05/08)

Autres sections - même nom

Section: 2 (Appels système)

名前

listen - ソケット(socket)上の接続を待つ

書式

#include <sys/socket.h>

int listen(int sockfd, int backlog);

説明

接続を受け付けるために、ソケットは最初に socket(2) で生成される。 入ってくる接続のためのキューの最大長は listen() によって指定されたあと、接続が accept(2) によって受け付けられる。 listen() コールは SOCK_STREAM 型または SOCK_SEQPACKET 型のソケットのみに適用できる。

backlog 引き数は、保留中の接続のキューが拡張することのできる最大長を指定する。 キューがいっぱいの状態で接続要求が到着すると、クライアントは ECONNREFUSED というエラーを受け取る。下位層のプロトコルが再送信をサポート していれば、要求は無視され、リトライが成功するかもしれない。

返り値

成功時には0を返す。エラー時には -1を返し、 errno を適切に設定する。

エラー

EADDRINUSE
別のソケットが既に同じポートを listen している。
EBADF
引き数 sockfd は有効なディスクリプターではない。
ENOTSOCK
引き数 sockfd はソケットではない。
EOPNOTSUPP
ソケットは listen() がサポートしている型ではない。

準拠

4.4BSD, POSIX.1-2001. listen() 関数は 4.2BSDで初めて実装された。

注意

TCP ソケットでの backlog 引数の振る舞いは Linux 2.2 で変更された。 現在ではこの引数は、 受け付けられるのを待っている、 完全に 確立されたソケットのキューの長さを指定する。 以前は不完全な接続要求の数であったが、これを置き換えた。 不完全なソケットのキューの最大長は sysctl 関数の tcp_max_syn_backlog を用いてセットする。 syncookie が有効になっている場合、 論理的に最大長は存在せず、 sysctl 関数による設定は無視される。

バグ

ソケットが AF_INET 型であり、 backlog 引き数が SOMAXCONN 定数 (Linux 2.0 と 2.2 では 128) よりも大きければ、backlog は暗黙のうちに SOMAXCONN に切り詰められる。

bind(2) 参照。

関連項目

accept(2), bind(2), connect(2), socket(2)
Si on veut dessiner la louve romaine, il faut
faire la gueule,
faire la queue
et lui faire deux enfants.
-+- Philippe Geluck, Le chat -+-