LPWSPLISTEN
コールバックシグネチャ
INT LPWSPLISTEN(
SOCKET s,
INT backlog,
INT* lpErrno
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| s | SOCKET | バインド済みで未接続のソケットを識別する記述子。 |
| backlog | INT | 保留中の接続のキューが拡張できる最大長。この値が SOMAXCONN の場合、サービスプロバイダーはバックログを「妥当な」最大値に設定します。実際のバックログ値を調べる標準的な手段はありません。 |
| lpErrno | INT* | エラーコードへのポインター。 |
公式ドキュメント
LPWSPListen 関数は、着信接続を待ち受けるためのソケットを確立します。
戻り値
エラーが発生しなかった場合、LPWSPListen はゼロを返します。それ以外の場合は SOCKET_ERROR が返され、具体的なエラーコードは lpErrno から取得できます。
| エラーコード | 意味 |
|---|---|
| ネットワークサブシステムに障害が発生しました。 | |
| ソケットのローカルアドレスが既に使用中であり、かつ SO_REUSEADDR によるアドレスの再利用を許可するようマークされていません。このエラーは通常 Bind の時点で発生しますが、**bind** が部分的なワイルドカードアドレス (ADDR_ANY を含むもの) に対して行われ、この関数の時点で特定のアドレスを確定する必要がある場合は、この関数まで遅延することがあります。 | |
| コールバックの実行中にこの関数が呼び出されました。 | |
| ソケットが LPWSPBind でバインドされていません。 | |
| ソケットは既に接続されています。 | |
| 使用可能なソケット記述子がこれ以上ありません。 | |
| 使用可能なバッファー領域がありません。 | |
| 記述子がソケットではありません。 | |
| 参照されたソケットは、LPWSPListen の操作をサポートする種類ではありません。 |
解説(Remarks)
接続を受け入れるには、まず LPWSPSocket でソケットを作成し、LPWSPBind でローカルアドレスにバインドします。次に LPWSPListen で着信接続用のバックログを指定し、その後 LPWSPAccept で接続を受け入れます。LPWSPListen は、コネクション指向のソケット (SOCK_STREAM など) にのみ適用されます。ソケット s はパッシブモードになり、着信接続要求が確認応答された上でキューに入れられ、Windows Sockets SPI クライアントによる受け入れを待ちます。
この関数は通常、同時に複数の接続要求を受ける可能性のあるサーバーで使用されます。キューが満杯の状態で接続要求が到着した場合、クライアントは WSAECONNREFUSED を示すエラーを受け取ります。
LPWSPListen は、使用可能な記述子がない場合でも合理的に動作し続ける必要があります。キューが空になるまで接続を受け入れる必要があります。記述子が使用可能になった場合、その後の LPWSPListen または LPWSPAccept の呼び出しによって、可能であればキューが現在または直近のバックログまで補充され、着信接続の待ち受けが再開されます。
Windows Sockets SPI クライアントは、同じソケットに対して LPWSPListen を複数回呼び出すことができます。これにより、待ち受けソケットの現在のバックログが更新されます。保留中の接続が新しい backlog の値を超えている場合、超過分の保留中の接続はリセットされて破棄されます。
backlog パラメーターは、サービスプロバイダーが決定する妥当な値に (通知なく) 制限されます。不正な値は、最も近い有効な値に置き換えられます。実際のバックログ値を調べる標準的な手段はありません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)