Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
listen - ソケット(socket)上の接続を待つ
書式
#include <sys/types.h> /* 「注意」参照 */ #include <sys/socket.h> int listen(int sockfd, int backlog);
説明
listen() は sockfd が参照するソケットを接続待ちソケット (passive socket) として印をつけ る。 接続待ちソケットとは、 accept(2) を使って到着した接続要求を受け付けるのに使用される ソケットである。 sockfd 引き数は、 SOCK_STREAM 型か SOCK_SEQPACKET 型のソケットを参照するファイルディスクリ プターである。 backlog 引き数は、 sockfd についての保留中の接続のキューの最大長を指定する。 キューがいっ ぱいの状態で接続要求が到着すると、クライアントは ECONNREFUSED というエラーを受け取る。下位 層のプロトコルが再送信をサポート していれば、要求は無視され、これ以降の接続要求の再送信が 成功するかもしれない。
返り値
成功した場合にはゼロが返される。エラー時には -1 が返され、 errno が適切に設定される。
エラー
EADDRINUSE 別のソケットが既に同じポートを listen している。 EADDRINUSE (インターネットドメインソケットの場合) sockfd が参照するソケットがそれ以前にアドレ スにバインドされておらず、 そのソケットに一時ポートをバインドしようとした際に、 一 時ポートとして使用する範囲のポート番号がすべて使用中であった。 ip(7) の /proc/sys/net/ipv4/ip_local_port_range の議論を参照のこと。 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 系) でこのヘッダー ファイルが 必要であり、移植性が必要なアプリケーションではこのファイルを インクルードするの が賢明であろう。 TCP ソケットでの backlog 引き数の振る舞いは Linux 2.2 で変更された。 現在ではこの引き数 は、 受け付けられるのを待っている、 完全に 確立されたソケットのキューの長さを指定する。 以 前は不完全な接続要求の数であったが、これを置き換えた。 不完全なソケットのキューの最大長は /proc/sys/net/ipv4/tcp_max_syn_backlog を用いて設定できる。 syncookie が有効になっている場 合、 論理的な最大長は存在せず、この設定は無視される。 backlog 引き数が /proc/sys/net/core/somaxconn の値よりも大きければ、 backlog の値は暗黙の うちにこの値に切り詰められる。 このファイルのデフォルト値は 128 である。 バージョン 2.4.5 以前のカーネルでは、この上限値は コード埋め込みの固定値 SOMAXCONN であり、その値は 128 で あった。
例
bind(2) 参照。
関連項目
accept(2), bind(2), connect(2), socket(2), socket(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。