PFN_WSK_INSPECT_EVENT コールバック関数 (wsk.h)

WskInspectEvent イベント コールバック関数は、条件付き受け入れモードが有効になっているリッスン ソケットでの受信接続要求が受信されたことを WSK アプリケーションに通知します。

構文

PFN_WSK_INSPECT_EVENT PfnWskInspectEvent;

WSK_INSPECT_ACTION PfnWskInspectEvent(
  [in, optional] PVOID SocketContext,
  [in]           PSOCKADDR LocalAddress,
  [in]           PSOCKADDR RemoteAddress,
  [in, optional] PWSK_INSPECT_ID InspectID
)
{...}

パラメーター

[in, optional] SocketContext

受信接続要求を受信したリッスン ソケットのソケット コンテキストへのポインター。 WSK アプリケーションは、 WskSocket 関数を呼び出してリッスン ソケットを作成したときに、WSK サブシステムへのこのポインターを提供しました。

[in] LocalAddress

受信接続要求が到着したローカル トランスポート アドレスを含むバッファーへのポインター。 バッファーには、WSK アプリケーションがリッスン ソケットの作成時に指定したアドレス ファミリに対応する特定の SOCKADDR 構造体の種類が含まれています。

[in] RemoteAddress

受信接続要求の送信元のリモート トランスポート アドレスを含むバッファーへのポインター。 バッファーには、WSK アプリケーションがリッスン ソケットの作成時に指定したアドレス ファミリに対応する特定の SOCKADDR 構造体の種類が含まれています。

[in, optional] InspectID

WSK_INSPECT_ID構造体へのポインター。 構造体の内容は、検査対象の着信接続要求を識別します。 このポインターが NULL の場合、リッスン しているソケットは機能しなくなり、WSK アプリケーションは WskCloseSocket 関数を呼び出して、リッスンしているソケットをできるだけ早く閉じる必要があります。

戻り値

WSK アプリケーションの WskInspectEvent イベント コールバック関数は、次のWSK_INSPECT_ACTION値のいずれかを返すことができます。

リターン コード 説明
WskInspectAccept
受信接続要求が受け入れられます。
WskInspectReject
着信接続要求は拒否されます。
WskInspectPend
WSK アプリケーションは、受信接続要求をすぐに受け入れるか拒否するかを判断できませんでした。

注釈

WSK サブシステムは、条件付き受け入れモードが有効になっているリッスン ソケットで WSK アプリケーションの WskInspectEvent イベント コールバック関数を呼び出します。 WSK アプリケーションでは、 SO_CONDITIONAL_ACCEPT ソケット オプションを有効にすることで、リッスン ソケットで条件付き受け入れモードを有効にすることができます。 受信接続を条件付きで受け入れる方法の詳細については、「受信Connectionsのリッスンと受け入れ」を参照してください。

WSK アプリケーションが WskInspectEvent イベント コールバック関数から WskInspectAccept を返した場合、WSK サブシステムはソケット接続を確立し続けます。 WSK サブシステムは、 WskAccept 関数の呼び出しを完了するか、イベント コールバック関数が有効になっている場合は WSK アプリケーションの WskAcceptEvent イベント コールバック関数を呼び出すことによって、ソケットを WSK アプリケーションに返します。 ソケット接続が完全に確立される前に受信接続要求が削除された場合、WSK サブシステムは WSK アプリケーションの WskAbortEvent イベント コールバック関数を呼び出します。

WSK アプリケーションが WskInspectEvent イベント コールバック関数から WskInspectReject を返した場合、受信接続要求は削除され、ソケット接続は確立されません。

WSK アプリケーションが WskInspectEvent イベント コールバック関数から WskInspectPend を返す場合、アプリケーションは、受信接続要求を受け入れるか拒否するかを決定した後で、WskInspectComplete 関数を呼び出す必要があります (その間に受信接続要求が中止されない限り)。 WSK アプリケーションは、WskInspectEvent イベント コールバック関数から戻る前に、InspectID パラメーターによって指されるWSK_INSPECT_ID構造体の内容を独自のWSK_INSPECT_ID構造体にコピーする必要があります。 WSK アプリケーションは、検査が完了したときに、独自のWSK_INSPECT_ID構造体へのポインターを WskInspectComplete 関数に渡します。 WSK アプリケーションでは、この構造体を使用して、検査が完了する前に要求が中止された場合に受信接続要求を識別します。

LocalAddress パラメーターと RemoteAddress パラメーターが指す SOCKADDR 構造体は、WskInspectEvent イベント コールバック関数の呼び出しの間のみ有効です。 WSK アプリケーションが WskInspectEvent イベント コールバック関数から WskInspectPend を返し、検査の残りの間にこれらのトランスポート アドレスが必要な場合は、WskInspectEvent イベント コールバック関数から返す前に、これらの構造体の内容を独自の SOCKADDR 構造体にコピーする必要があります。

WSK サブシステムは、WSK アプリケーションの WskInspectEvent イベント コールバック関数を IRQL <= DISPATCH_LEVEL で呼び出します。

WSK アプリケーションの WskInspectEvent イベント コールバック関数は、WSK 完了関数またはイベント コールバック関数のコンテキストで他の WSK 要求の完了を待つ必要はありません。 コールバックは、他の WSK 要求を開始できますが (DISPATCH_LEVELに時間がかかりすぎないことを前提とします)、IRQL = PASSIVE_LEVEL でコールバックが呼び出された場合でも、その完了を待つ必要はありません。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム Windows
ヘッダー wsk.h (Wsk.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

Sockaddr

WSK_CLIENT_LISTEN_DISPATCH

WSK_INSPECT_ID

WskAbortEvent

WskAccept

WskAcceptEvent

WskCloseSocket

WskControlSocket

WskInspectComplete

WskSocket