LPWSPACCEPT コールバック関数 (ws2spi.h)
LPWSPAccept 関数は、条件関数の戻り値に基づいて、条件付きで接続を受け入れます。
構文
LPWSPACCEPT Lpwspaccept;
SOCKET Lpwspaccept(
[in] SOCKET s,
[out] sockaddr *addr,
[in, out] LPINT addrlen,
[in] LPCONDITIONPROC lpfnCondition,
[in] DWORD_PTR dwCallbackData,
[out] LPINT lpErrno
)
{...}
パラメーター
[in] s
LPWSPListen後に接続をリッスンしているソケットを識別する記述子。
[out] addr
サービス プロバイダーに知られているように、接続エンティティのアドレスを受け取るバッファーへの省略可能なポインター。 addr パラメーターの正確な形式は、sockaddr 構造体のソケットが作成されたときに確立されたアドレス ファミリによって決まります。
[in, out] addrlen
addr パラメーターの長さをバイト単位で格納する整数への省略可能なポインター。
[in] lpfnCondition
Windows ソケットによって提供されるオプション条件関数のプロシージャ インスタンス アドレス。 この関数は、パラメーターとして渡された呼び出し元情報に基づいて、受け入れまたは拒否の決定で使用されます。
[in] dwCallbackData
条件関数の dwCallbackData パラメーターの値として Windows Socket 2 クライアントに返されるコールバック データ。 このパラメーターは、サービス プロバイダーによって解釈されません。
[out] lpErrno
エラー コードへのポインター。
戻り値
エラーが発生しない場合、LPWSPAccept
エラー コード | 意味 |
---|---|
|
条件関数 (CF_REJECT) の戻り値で示されているように、接続要求が強制的に拒否されました。 |
|
着信接続が示されましたが、その後、呼び出しを受け入れる前にリモート ピアによって終了されました。 |
|
ネットワーク サブシステムが失敗しました。 |
|
addrlen パラメーターが小さすぎるか、lpfnCondition パラメーターがユーザー アドレス空間の一部ではありません。 |
|
LPWSPCancelBlockingCall |
|
ブロックしている Windows ソケット呼び出しが進行中です。 |
|
LPWSPAccept より前に LPWSPListen が呼び出されなかった |
|
LPWSPAccept への入力時にキューが空でなく、使用可能なソケット記述子がありません。 |
|
使用できるバッファー領域はありません。 |
|
記述子はソケットではありません。 |
|
参照されるソケットは、接続指向サービスをサポートする型ではありません。 |
接続要求の受け入れは、条件関数 (CF_DEFER) の戻り値で示されているように遅延されました。 | |
|
ソケットは非ブロッキングとしてマークされ、受け入れられる接続はありません。 |
|
提供された接続要求がタイムアウトしたか、取り消されました。 |
備考
LPWSPAccept 関数は、ソケット sで保留中の接続のキュー上の最初の接続を抽出し、条件関数が指定されている場合 (つまり、null ではない) 条件関数と照合します。 条件関数は、このルーチンと同じスレッドで実行する必要があります。 条件関数がCF_ACCEPTを返す場合は、LPWSPAccept
新しく作成されたソケットには、
条件関数がCF_REJECTを返す場合は、LPWSPAccept
(既定の) ブロック モードのソケットの場合、保留中の接続がキューに存在しない場合、LPWSPAccept 接続が存在するまで呼び出し元をブロックします。 非ブロッキング モードのソケットの場合、保留中の接続がキューに存在しないときにこの関数が呼び出された場合、LPWSPAccept
addr
条件関数のプロトタイプは次のとおりです。
int CALLBACK
ConditionFunc(
IN LPWSABUF lpCallerId,
IN LPWSABUF lpCallerData,
IN OUT LPQOS lpSQOS,
IN OUT LPQOS lpGQOS,
IN LPWSABUF lpCalleeId,
IN LPWSABUF lpCalleeData,
OUT GROUP FAR * g,
IN DWORD_PTR dwCallbackData
);
lpCallerId と lpCallerData は、接続エンティティのアドレスと、接続要求と共に送信されたすべてのユーザー データを含む必要がある値パラメーターです。 呼び出し元識別子または呼び出し元データが使用できない場合、対応するパラメーターは null になります。 多くのネットワーク プロトコルでは、接続時の呼び出し元データはサポートされていません。 ほとんどの従来のネットワーク プロトコルでは、接続要求時に呼び出し元識別子情報をサポートすることが期待できます。
lpSQOS パラメーターは、呼び出し元によって指定されたソケット の のフロー仕様を参照します。各方向に 1 つずつ、さらにプロバイダー固有のパラメーターが続きます。 送信側または受信フローの指定値は、単一方向ソケットに対して適切に無視されます。
lpSQOS の null 値は、呼び出し元が指定した QoS がなく、ネゴシエーションが不可能であることを示します。 lpSQOS ポインター
lpCalleeId は、接続されたエンティティのローカル アドレスを含む値パラメーターです。 bufWSABUF の一部 lpCalleeId が指、sockaddrを指しています。 sockaddr は、アドレス ファミリに従って解釈されます (通常は、sockaddr をアドレス ファミリに固有の型にキャストします)。
lpCalleeData は、接続エンティティにユーザー データを返すために条件関数によって使用される結果パラメーターです。 このデータのストレージは、サービス プロバイダーによって提供される必要があります。
条件関数に渡される dwCallbackData パラメーター値は、元の LPWSPAccept 呼び出しで dwCallbackData パラメーターとして渡される値です。 この値は、Windows Sockets 2 クライアントによってのみ解釈されます。 これにより、クライアントは、LPWSPAccept 呼び出しサイトから条件関数にコンテキスト情報を渡すことができます。これにより、接続を受け入れるかどうかを判断するために必要な追加情報が条件関数に提供されます。 一般的な使用法は、このソケットが関連付けられているアプリケーション定義オブジェクトへの参照を含むデータ構造に (適切にキャストされた) ポインターを渡すことです。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | ws2spi.h |
関連項目
LPWSPAsyncSelect の
LPWSPBind の
LPWSPConnect を
LPWSPEventSelect の
LPWSPGetSockOpt の
LPWSPListen を
LPWSPSelect を
LPWSPSocket を