CAsyncSocket::Listen
更新 : 2007 年 11 月
接続要求を待機します。
BOOL Listen(
int nConnectionBacklog = 5
);
パラメータ
- nConnectionBacklog
接続待ちのキューを拡張できる最大長。有効な範囲は 1 ~ 5 です。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。GetLastError を呼び出すと、固有のエラー コードを取得できます。このメンバ関数では、次のエラーが発生します。
WSANOTINITIALISED この API を使う前に AfxSocketInit の呼び出しが正常終了していることが必要です。
WSAENETDOWN Windows ソケットの実装が、ネットワーク サブシステムの異常を検出しました。
WSAEADDRINUSE 使用中のアドレスでの待機を試みました。
WSAEINPROGRESS 実行中の Windows ソケット呼び出しがブロッキングされています。
WSAEINVAL ソケットは Bind を使ってバインドされていないか、既に接続されています。
WSAEISCONN ソケットは既に接続されています。
WSAEMFILE 利用できるファイル記述子がありません。
WSAENOBUFS 利用できるバッファ領域がありません。
WSAENOTSOCK 記述子がソケットではありません。
WSAEOPNOTSUPP 参照されるソケットの型は、Listen 操作をサポートしていません。
解説
接続を受け入れるには、まず Create を使ってソケットを作成し、Listen を使って接続に入るバックログを指定します。その後、Accept を使って接続を受け入れます。Listen は接続をサポートするソケットのみに適用されます。つまり、SOCK_STREAM 型のソケットのみに適用されます。このソケットは "受動" モードになります。受動モードでは、接続要求は、プロセスにより認識され、受け入れ待ちのキューに置かれます。
一般的に、この関数は、サーバーまたは接続を受け入れたいアプリケーションが使います。つまり、同時に複数の接続要求を処理するアプリケーションで使います。キューが満杯のときに接続要求が到着すると、クライアントは WSAECONNREFUSED で識別されるエラーになります。
Listen は利用できるポート (記述子) がないとき、合理的に処理を継続しようとします。つまり、キューが空になるまで接続を受け入れます。ポートが利用できるようになると、その後の Listen または Accept 呼び出しで、可能な場合は現在のまたは直前の "バックログ" へキューの内容を充填します。その後、入ってくる接続の待機を再開します。
必要条件
ヘッダー : afxsock.h