次の方法で共有


SO_WSK_EVENT_CALLBACK

SO_WSK_EVENT_CALLBACK ソケット オプションを使用すると、WSK アプリケーションでソケットのイベント コールバック関数を有効または無効にすることができます。 このソケット オプションは、少なくとも 1 つのイベント コールバック関数が定義されている拡張インターフェイスを登録したリッスン ソケット、データグラム ソケット、接続指向ソケット、および基本ソケットにのみ適用されます。

WSK アプリケーションでこのソケット オプションを使用してリッスン ソケットまたはデータグラム ソケットのイベント コールバック関数を有効または無効にする場合は、ソケットがローカル トランスポート アドレスにバインドされた後で有効または無効にする必要があります。

WSK アプリケーションでこのソケット オプションを使用して接続指向ソケットのイベント コールバック関数を有効または無効にする場合は、ソケットがリモート トランスポート アドレスに接続された後に有効または無効にする必要があります。

ソケットでイベント コールバック関数を有効または無効にするには、WSK アプリケーションは、次のパラメーターを 使用して WskControlSocket 関数を呼び出します。

パラメーター

RequestType

WskSetOption

ControlCode

SO_WSK_EVENT_CALLBACK

Level

SOL_SOCKET

InputSize

sizeof(WSK_EVENT_CALLBACK_CONTROL)

InputBuffer

WSK_EVENT_CALLBACK_CONTROL 構造体へのポインター

OutputSize

0

OutputBuffer

NULL

OutputSizeReturned

NULL

WskControlSocket 関数を呼び出してソケットでイベント コールバック関数を有効にする場合、WSK アプリケーションは IRP へのポインターを指定しません。

WSK アプリケーションは、WskControlSocket 関数を呼び出してソケットのイベント コールバック関数を無効にする場合に、IRP へのポインターを必要に応じて指定できます。

WSK アプリケーションが WskControlSocket を呼び出してイベント コールバック関数を無効にすると、WSK サブシステムは次のように動作します。

  • WSK アプリケーションが WskControlSocket 関数を呼び出したときに無効になっているイベント コールバック関数の進行中の呼び出しがない場合、イベント コールバック関数は無効になり、WskControlSocket 関数はSTATUS_SUCCESSを返します。 WSK アプリケーションで IRP が指定されている場合、IRP は成功状態で完了します。

  • WSK アプリケーションが WskControlSocket 関数を呼び出し、WSK アプリケーションが IRP を指定したときに無効になっているイベント コールバック関数の呼び出しが進行中である場合、WskControlSocket 関数はSTATUS_PENDINGを返します。 WSK サブシステムは、イベント コールバック関数を無効にし、イベント コールバック関数のすべての進行中の呼び出しが返された後に IRP を完了します。

  • WSK アプリケーションが WskControlSocket 関数を呼び出し、WSK アプリケーションが IRP を指定しなかった時に無効になっているイベント コールバック関数の呼び出しが進行中である場合、WskControlSocket 関数はSTATUS_PENDINGを返します。 WSK サブシステムは、イベント コールバック関数に対するすべての進行中の呼び出しが返された後、イベント コールバック関数を無効にします。

WSK アプリケーションは、標準の WSK イベント コールバック関数を有効または無効にするときに、WSK_EVENT_CALLBACK_CONTROL 構造体の NpiId メンバーを WSK ネットワーク プログラミング インターフェイス (NPI) 識別子 (NPI_WSK_INTERFACE_ID) へのポインターに設定します。

拡張インターフェイスのコールバック関数を有効または無効にすると、WSK アプリケーションは、WSK_EVENT_CALLBACK_CONTROL構造体の NpiId メンバーを、その拡張インターフェイスの NPI 識別子へのポインターに設定します。

イベント コールバック関数を有効にすると、WSK アプリケーションは、WSK ソケットの特定 のカテゴリ に対して有効なイベント コールバック関数の任意の組み合わせを同時に有効にすることができます。 WSK アプリケーションでは、有効になっているすべてのイベント コールバック関数に対して、WSK_EVENT_CALLBACK_CONTROL構造体の EventMask メンバーをイベント フラグのビットごとの OR に設定することで、これらの組み合わせを同時に有効にします。

イベント コールバック関数を無効にする場合、WSK アプリケーションは各イベント コールバック関数を個別に無効にする必要があります。 WSK アプリケーションは、WSK_EVENT_CALLBACK_CONTROL構造体の EventMask メンバーを、無効になっているイベント コールバック関数とWSK_EVENT_DISABLE フラグのイベント フラグのビットごとの OR に設定することで、イベント コールバック関数を個別に無効にします。

次の表に、リッスン ソケットの有効なイベント フラグを示します。

イベント フラグ イベント コールバック関数

WSK_EVENT_ACCEPT

WskAcceptEvent

次の表に、データグラム ソケットの有効なイベント フラグを示します。

イベント フラグ イベント コールバック関数

WSK_EVENT_RECEIVE_FROM

WskReceiveFromEvent

次の表に、接続指向ソケットの有効なイベント フラグを示します。

イベント フラグ イベント コールバック関数

WSK_EVENT_DISCONNECT

WskDisconnectEvent

WSK_EVENT_RECEIVE

WskReceiveEvent

WSK_EVENT_SEND_BACKLOG

WskSendBacklogEvent

リッスン ソケットは、リッスン ソケットによって受け入れられる接続指向ソケットでイベント コールバック関数を自動的に有効にすることができます。 WSK アプリケーションは、リッスン しているソケットでコネクション指向ソケット イベント コールバック関数を有効にすることで、これらのコールバック関数を自動的に有効にします。 イベント コールバック関数は、リッスンしているソケットの WskAcceptEvent イベント コールバック関数によってソケットが受け入れられる場合にのみ、受け入れられた接続指向ソケットで自動的に有効になります。 リッスンしているソケットの WskAccept 関数によって接続指向ソケットが受け入れられる場合、受け入れられたソケットのイベント コールバック関数は自動的には有効になりません。

リッスン ソケットで接続指向のイベント コールバック関数が有効になると、リッスン ソケットで無効にすることはできません。 WskAcceptEvent イベント コールバック関数が無効になり、リッスン ソケットで再度有効になった場合、そのリッスン ソケットで最初に有効にされていた接続指向のイベント コールバック関数は、WskAcceptEvent イベント コールバック関数によって受け入れられるすべての接続指向ソケットに引き続き適用されます。

ソケットのイベント コールバック関数の有効化と無効化の詳細については、「イベント コールバック関数の有効化と無効化」を参照してください。

要件

バージョン

Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。

ヘッダー

Wsk.h (Wsk.h のインクルード)