Winsock カーネル イベント
Winsock カーネル (WSK) サブシステムは、ソケットで新しいデータが受信されたときやソケットが切断されたときなど、特定のソケット イベントが発生したときに、WSK アプリケーションに非同期的に通知できます。 WSK アプリケーションがソケット イベントの非同期通知を受け取るには、WSK アプリケーションが適切なイベント コールバック関数を実装し、作成するソケットでそれらのイベント コールバック関数を有効にする必要があります。
注 WSK アプリケーションで、イベント コールバック関数の実装または使用は必須ではありません。 WSK アプリケーションは、適切な WSK ソケット関数を呼び出すことによって、ほとんどの WSK ソケット操作を実行できます。 イベント コールバック関数を使用する必要がある唯一の WSK 機能は、リッスン ソケットでの条件付き受け入れモードです。 WSK 関数の使用とイベント コールバック関数の使用の長所と短所の詳細については、「Winsock カーネル関数とイベント コールバック関数の使用」を参照してください。
各 WSK ソケット カテゴリは、異なるソケット イベントのセットをサポートしています。
基本ソケット
基本ソケットは、ソケット イベントをサポートしていません。
リッスン ソケット
イベント | イベント コールバック関数 |
---|---|
受信接続が承認された。 |
|
受信接続要求が到着した。 |
|
受信接続要求が破棄された。 |
* 条件付き受け入れモードが有効になっているリッスン ソケットにのみ適用されます。 リッスン ソケットで条件付き受け入れモードを使用する方法の詳細については、「受信接続のリッスンと受け入れ」を参照してください。
データグラム ソケット
イベント | イベント コールバック関数 |
---|---|
1 つ以上の新しいデータグラムが受信された。 |
接続指向ソケット
イベント | イベント コールバック関数 |
---|---|
新しいデータが受信された。 |
|
ソケットが切断された。 |
|
理想的な送信バックログのサイズが変更された。 |
WSK アプリケーションがソケットを作成すると、ソケットのイベント コールバック関数は既定で無効になります。 ソケット イベントが発生したときに WSK サブシステムがソケットのイベント コールバック関数を呼び出せるようにするには、WSK アプリケーションでソケットのイベント コールバック関数を有効にする必要があります。 ソケットのイベント コールバック関数の有効化と無効化の詳細については、「イベント コールバック関数の有効化と無効化」を参照してください。
WSK アプリケーションがソケットの拡張インターフェイスを登録する場合、拡張インターフェイスは追加のイベントをサポートする可能性があります。 ソケットの拡張インターフェイスの登録の詳細については、「拡張インターフェイスの登録」を参照してください。
WSK サブシステムは、特定のソケットに固有ではないイベントを WSK アプリケーションに通知することもできます。 WSK アプリケーションがこれらのイベントを通知されるようにするには、WSK アプリケーションで WskClientEvent イベント コールバック関数を実装する必要があります。 現在、特定のソケットに固有ではないイベントは定義されていません。 WSK アプリケーションの WskClientEvent イベント コールバック関数は常に有効であり、無効にすることはできません。
WSK アプリケーションのイベント コールバック関数は、WSK 完了またはイベント コールバック関数のコンテキストで、他の WSK 要求の完了を待機してはいけません。 コールバックは、他の WSK 要求を、DISPATCH_LEVEL で時間がかかり過ぎず、カーネル スタックを使い果たさないと仮定して開始できますが、コールバックが IRQL = PASSIVE_LEVEL で呼び出される場合でも、他の WSK 要求の完了を待機してはいけません。