listen() - 着信クライアント要求のためのサーバーの準備

標準

標準/拡張機能 C/C++ 依存項目

XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

X/Open:
#define _XOPEN_SOURCE_EXTENDED 1
#include <sys/socket.h>

int listen(int socket, int backlog);
バークレー・ソケット:
#define _OE_SOCKETS
#include <sys/socket.h>

int listen(int socket, int backlog);

機能説明

listen() 関数は、ストリーム・ソケットのみに適用します。クライアント接続要求を受け取るための作動可能状態を示し、入力接続要求をキューに入れるため、backlog の長さの接続要求キューを作成します。いったん一杯になると、以降の接続要求はリジェクトされます。
パラメーター
説明
socket
ソケット記述子。
backlog
接続保留中のキューの最大長を定義する。

listen() 呼び出しは、クライアント接続要求を受け取るための作動可能状態を示します。アクティブ・ソケットをパッシブ・ソケットに変換します。一度呼び出されると、接続要求を開始するために、socket をアクティブ・ソケットとして使用することは決してできません。listen() の呼び出しは、サーバーが接続を受け取るための 4 ステップのうちの 3 つ目です。ストリーム・ソケットを socket() で割り振った後、かつ名前を socket へ bind() で結合した後、呼び出されます。accept() を呼び出す前に、それを呼び出さなければなりません。

backlog が 0 より小さい場合、backlog0 に設定されます。backlog が SOMAXCONN ( sys/socket.h で定義された) よりも大きい場合、backlog は SOMAXCONN に設定されます。

AF_UNIX ソケットの場合は、この値は変数であり、アプリケーションで 設定できます。AF_INET および AF_INET6 ソケットの場合は、その値はインストール済みの TCP/IP で可能な接続の最大数を超えることはできません。

C++ の特殊な動作: C++ でこの関数を使用するには、_XOPEN_SOURCE_EXTENDED 1 フィーチャー・テスト・マクロを 使用する必要があります。

戻り値

正常に実行された場合、listen() は 0 を戻します。

正常に実行されなかった場合、listen() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EBADF
socket パラメーターが無効ソケット記述子です。
EDESTADDRREQ
ソケットがローカル・アドレスにバインドされていません。また プロトコルがバインドされていないソケットを listen することをサポートし ていません。
EINVAL
無効な引数が指定されました。ソケットが指定されていないか (bind() が行われていません)、またはソケットが、接続の受け取り可能状態です (listen() が既に行われています)。ソケットは既に接続されています。
ENOBUFS
使用可能なシステム・リソースが不十分で、呼び出しを完了させることができません。
ENOTSOCK
記述子はファイル用であり、ソケット用ではありません。
EOPNOTSUPP
socket パラメーターが、listen() 呼び出しをサポートするソケット記述子ではありません。

関連情報