Winsock カーネル イベント

Winsock カーネル (WSK) サブシステムは、ソケットで新しいデータが受信されたときやソケットが切断されたときなど、特定のソケット イベントが発生したときに、WSK アプリケーションに非同期的に通知できます。 WSK アプリケーションがソケット イベントの非同期通知を受け取るには、WSK アプリケーションが適切なイベント コールバック関数を実装し、作成するソケットでそれらのイベント コールバック関数を有効にする必要があります。

WSK アプリケーションで、イベント コールバック関数の実装または使用は必須ではありません。 WSK アプリケーションは、適切な WSK ソケット関数を呼び出すことによって、ほとんどの WSK ソケット操作を実行できます。 イベント コールバック関数を使用する必要がある唯一の WSK 機能は、リッスン ソケットでの条件付き受け入れモードです。 WSK 関数の使用とイベント コールバック関数の使用の長所と短所の詳細については、「Winsock カーネル関数とイベント コールバック関数の使用」を参照してください。

各 WSK ソケット カテゴリは、異なるソケット イベントのセットをサポートしています。

基本ソケット

基本ソケットは、ソケット イベントをサポートしていません。

リッスン ソケット

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

受信接続が承認された。

WskAcceptEvent

受信接続要求が到着した。

WskInspectEvent

受信接続要求が破棄された。

WskAbortEvent

* 条件付き受け入れモードが有効になっているリッスン ソケットにのみ適用されます。 リッスン ソケットで条件付き受け入れモードを使用する方法の詳細については、「受信接続のリッスンと受け入れ」を参照してください。

データグラム ソケット

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

1 つ以上の新しいデータグラムが受信された。

WskReceiveFromEvent

接続指向ソケット

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

新しいデータが受信された。

WskReceiveEvent

ソケットが切断された。

WskDisconnectEvent

理想的な送信バックログのサイズが変更された。

WskSendBacklogEvent

WSK アプリケーションがソケットを作成すると、ソケットのイベント コールバック関数は既定で無効になります。 ソケット イベントが発生したときに WSK サブシステムがソケットのイベント コールバック関数を呼び出せるようにするには、WSK アプリケーションでソケットのイベント コールバック関数を有効にする必要があります。 ソケットのイベント コールバック関数の有効化と無効化の詳細については、「イベント コールバック関数の有効化と無効化」を参照してください。

WSK アプリケーションがソケットの拡張インターフェイスを登録する場合、拡張インターフェイスは追加のイベントをサポートする可能性があります。 ソケットの拡張インターフェイスの登録の詳細については、「拡張インターフェイスの登録」を参照してください。

WSK サブシステムは、特定のソケットに固有ではないイベントを WSK アプリケーションに通知することもできます。 WSK アプリケーションがこれらのイベントを通知されるようにするには、WSK アプリケーションで WskClientEvent イベント コールバック関数を実装する必要があります。 現在、特定のソケットに固有ではないイベントは定義されていません。 WSK アプリケーションの WskClientEvent イベント コールバック関数は常に有効であり、無効にすることはできません。

WSK アプリケーションのイベント コールバック関数は、WSK 完了またはイベント コールバック関数のコンテキストで、他の WSK 要求の完了を待機してはいけません。 コールバックは、他の WSK 要求を、DISPATCH_LEVEL で時間がかかり過ぎず、カーネル スタックを使い果たさないと仮定して開始できますが、コールバックが IRQL = PASSIVE_LEVEL で呼び出される場合でも、他の WSK 要求の完了を待機してはいけません。