SOCK_NOTIFY_REGISTRATION構造体 (winsock2.h)

ProcessSocketNotifications 関数に提供される情報を表します。

詳細とコード例については、「 Winsock ソケットの状態通知」を参照してください。

構文

typedef struct SOCK_NOTIFY_REGISTRATION {
  SOCKET socket;
  PVOID  completionKey;
  UINT16 eventFilter;
  UINT8  operation;
  UINT8  triggerFlags;
  DWORD  registrationResult;
} SOCK_NOTIFY_REGISTRATION;

メンバー

socket

種類: SOCKET

WSASocket、socketWSAAcceptaccept、または WSADuplicateSocket 関数によって開かれた Winsock ソケットへのハンドル。 Microsoft Winsock プロバイダー ソケットのみがサポートされています。

completionKey

種類: PVOID

ソケットに代わって通知が送信されるときに PostQueuedCompletionStatus 関数の dwCompletionKey パラメーターで使用する値。 このパラメーターは、登録の作成時に使用されます。 完了キーを変更するには、登録を削除して再登録します。

eventFilter

種類: UINT16

要求される通知を示すフラグのセット。 これは、次の値の 1 つ以上である必要があります (で WinSock2.h定義されています)。

SOCK_NOTIFY_REGISTER_EVENT_NONE。 通知は発行しないでください。 SOCK_NOTIFY_REGISTER_EVENT_IN。 ブロックせずにデータを読み取ることができる場合は、通知を発行する必要があります。 SOCK_NOTIFY_REGISTER_EVENT_OUT。 ブロックせずにデータを書き込むことができる場合は、通知を発行する必要があります。 SOCK_NOTIFY_REGISTER_EVENT_HANGUP。 ストリーム指向接続が切断または中止されたときに通知を発行する必要があります。 SOCK_NOTIFY_REGISTER_EVENTS_ALL。 値 (SOCK_NOTIFY_REGISTER_EVENT_IN | SOCK_NOTIFY_REGISTER_EVENT_OUT | SOCK_NOTIFY_REGISTER_EVENT_HANGUP)が です。

operation

種類: UINT8

登録に対して実行する操作を示します。 一度に最大 1 つの操作を実行できます。 これらの値は、 で WinSock2.h定義されています。

SOCK_NOTIFY_OP_NONE。 登録操作は行われません。 これは、アプリケーションが ProcessSocketNotifications を呼び出し、通知の受信のみに関心がある場合に使用します。 SOCK_NOTIFY_OP_ENABLE。 登録を有効にします。 SOCK_NOTIFY_EVENT_DISABLE通知を受信するまで、通知を再び有効にすることはできません。 SOCK_NOTIFY_OP_DISABLE。 登録を無効にしますが、基になるデータ構造は破棄されません。 これは登録を削除せず、単に新しい通知のキューを抑制することに注意してください。 既にキューに登録されている通知は、 SOCK_NOTIFY_EVENT_DISABLE イベントが受信されるまで引き続き配信される場合があります。 SOCK_NOTIFY_OP_REMOVE。 以前に登録された通知を削除します。 有効な通知と無効な通知の両方が削除される場合があります。 SOCK_NOTIFY_EVENT_REMOVE通知が発行され、再登録されない限り、その完了キーに対する通知が後で発行されなくなります。

triggerFlags

種類: UINT8

トリガーの動作を示すフラグのセット (で WinSock2.h定義されています)。

SOCK_NOTIFY_TRIGGER_ONESHOT。 登録は、次の通知の配信時に無効になります (削除されません)。 SOCK_NOTIFY_TRIGGER_PERSISTENT。 登録は、明示的に無効または削除されるまでアクティブなままになります。 SOCK_NOTIFY_TRIGGER_LEVEL。 登録は、レベルによってトリガーされる通知用です。 エッジ トリガーと互換性がありません。 エッジトリガーまたはレベルトリガーのいずれかを指定する必要があります。 SOCK_NOTIFY_TRIGGER_EDGE。 登録は、エッジによってトリガーされる通知用です。 レベルトリガーと互換性がありません。 エッジトリガーまたはレベルトリガーのいずれかを指定する必要があります。

通知は、登録が有効になっている場合にのみ提供されます。 登録が無効になっている間、通知はキューに登録されません。 通知は特定のソケットに対してキューに登録されると、1 つの通知に結合されます。 したがって、ソケットの 1 つのイベント マスクで複数のイベントを記述できます。

登録が有効になっている場合、必要な条件が保持されるたびに、レベルによってトリガーされる通知が提供されます。

登録が有効になっている場合、条件が保持されていないから保留に変わるたびに、エッジによってトリガーされる通知が提供されます。 通知をキューに登録するには、登録が有効になっている間に条件を変更する必要があります。 そのため、登録後、通知を確実に受信するには、ソケットの受信バッファーを完全にドレインする必要があります。

registrationResult

種類: DWORD

ProcessSocketNotifications の呼び出しが成功すると、registrationResult には登録の成功または失敗を示すコードが含まれます。 ERROR_SUCCESS の値は、登録が成功したことを示します。

要件

要件
サポートされている最小のクライアント Windows 10 ビルド 20348
サポートされている最小のサーバー Windows 10 ビルド 20348
Header winsock2.h

こちらもご覧ください