LPWSPENUMNETWORKEVENTS
コールバックシグネチャ
INT LPWSPENUMNETWORKEVENTS(
SOCKET s,
HANDLE hEventObject,
WSANETWORKEVENTS* lpNetworkEvents,
INT* lpErrno
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| s | SOCKET | ソケットを識別するデスクリプター。 |
| hEventObject | HANDLE | リセットする、関連付けられたイベントオブジェクトを識別する省略可能なハンドル。 |
| lpNetworkEvents | WSANETWORKEVENTS* | 発生したネットワークイベントの記録と、それに関連するエラーコードが格納される WSANETWORKEVENTS 構造体へのポインター。WSANETWORKEVENTS 構造体は、以下の本文で定義されています。 |
| lpErrno | INT* | エラーコードへのポインター。 |
公式ドキュメント
LPWSPEnumNetworkEvents 関数は、指定されたソケットで発生したネットワークイベントを報告します。
戻り値
操作が成功した場合、戻り値は 0 です。それ以外の場合は SOCKET_ERROR が返され、固有のエラー番号が lpErrno に格納されます。
| エラーコード | 意味 |
|---|---|
| ネットワークサブシステムに障害が発生しました。 | |
| 指定されたパラメーターのいずれかが無効であったことを示します。 | |
| ブロッキング Windows Sockets 呼び出しが進行中であるか、サービスプロバイダーがコールバック関数をまだ処理中です。 | |
| デスクリプターがソケットではありません。 |
解説(Remarks)
この関数は、前回この関数を呼び出して以降に、指定されたソケットで発生したネットワークイベントを報告するために使用します。この関数は、1 つ以上のネットワークイベントにイベントオブジェクトを関連付ける LPWSPEventSelect および LPWSPAsyncSelect と組み合わせて使用することを想定しています。ネットワークイベントの記録は、LPWSPEventSelect または LPWSPAsyncSelect が 0 以外の lNetworkEvents 引数で呼び出された時点で開始され、lNetworkEvents 引数を 0 に設定した対応する LPWSPEventSelect または LPWSPAsyncSelect の呼び出しが行われるまで有効なままです。
LPWSPEnumNetworkEvents が報告するのは、LPWSPEventSelect で指定されたネットワークアクティビティとエラーのみです。LPWSPSelect および LPWSPAsyncSelect の説明を参照して、これらの関数がネットワークアクティビティとエラーをどのように報告するかを確認してください。
ソケットの内部のネットワークイベント記録が lpNetworkEvents で参照される構造体にコピーされ、その後、内部のネットワークイベント記録はクリアされます。hEventObject が NULL 以外の場合は、指定されたイベントオブジェクトもリセットされます。Windows Sockets プロバイダーは、ネットワークイベント記録のコピー、そのクリア、および関連するイベントオブジェクトのリセットという各操作がアトミックに行われることを保証します。そのため、指定されたネットワークイベントが次に発生した時点で、イベントオブジェクトはシグナル状態になります。この関数が SOCKET_ERROR を返した場合、関連するイベントオブジェクトはリセットされず、ネットワークイベントの記録もクリアされません。
WSANETWORKEVENTS 構造体は、WSANETWORKEVENTS のリファレンスページで定義されています。
WSANETWORKEVENTS 構造体の lNetworkEvents メンバーは、FD_XXX ネットワークイベントのうちどれが発生したかを示します。iErrorCode 配列は、関連するエラーコードを格納するために使用され、配列のインデックスは lNetworkEvents 内のイベントビットの位置に対応します。iErrorCode 配列のインデックス指定には、FD_READ_BIT や FD_WRITE_BIT などの識別子を使用できます。
iErrorCode 配列のうち、lNetworkEvents メンバーで設定されたビットに対応する要素のみが設定される点に注意してください。それ以外のメンバーは変更されません (これは、新しい FD_ROUTING_INTERFACE_CHANGE イベントおよび FD_ADDRESS_LIST_CHANGE イベントを認識しない Windows Socket 2 SPI クライアントとの下位互換性のために重要です)。
それぞれのネットワークイベントとともに、次のエラーコードが返される場合があります。
イベント: FD_CONNECT
| エラーコード | 意味 |
|---|---|
| 指定されたファミリのアドレスは、このソケットでは使用できません。 | |
| 接続の試行が強制的に拒否されました。 | |
| 現時点では、このホストからネットワークに到達できません。 | |
| 使用可能なバッファー領域がありません。ソケットを接続できません。 | |
| 接続を確立しないまま、接続の試行がタイムアウトしました。 |
イベント: FD_CLOSE
| エラーコード | 意味 |
|---|---|
| ネットワークサブシステムに障害が発生しました。 | |
| 接続がリモート側によってリセットされました。 | |
| タイムアウトまたはその他の障害により、接続が終了しました。 |
イベント: FD_READ, FD_WRITE, FD_OOB, FD_ACCEPT, FD_QOS, FD_GROUP_QOS, FD_ADDRESS_LIST_CHANGE
| エラーコード | 意味 |
|---|---|
| ネットワークサブシステムに障害が発生しました。 |
イベント: FD_ROUTING_INTERFACE_CHANGE
| エラーコード | 意味 |
|---|---|
| 指定された宛先には到達できなくなりました。 | |
| ネットワークサブシステムに障害が発生しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)