LPWSPEVENTSELECT コールバック関数 (ws2spi.h)
LPWSPEventSelect 関数は、指定されたネットワーク イベントのセットに関連付けるイベント オブジェクトを指定します。
構文
LPWSPEVENTSELECT Lpwspeventselect;
int Lpwspeventselect(
[in] SOCKET s,
[in] WSAEVENT hEventObject,
[in] long lNetworkEvents,
[out] LPINT lpErrno
)
{...}
パラメーター
[in] s
ソケットを識別する記述子。
[in] hEventObject
指定されたネットワーク イベントのセットに関連付けるイベント オブジェクトを識別するハンドル。
[in] lNetworkEvents
Windows ソケット SPI クライアントが関心を持つネットワーク イベントの組み合わせを指定するビットマスク。 ビットごとの OR 演算子とこれらの値のいずれかを使用して構築されます。
価値 | 意味 |
---|---|
|
読み取り準備の通知を発行します。 |
|
書き込み準備の通知を発行します。 |
|
OOB データの到着通知を発行します。 |
|
受信接続の通知を発行します。 |
|
完了した接続の通知を発行します。 |
|
ソケットクロージャの通知を発行します。 |
|
ソケット (QoS) の変更の通知を発行します。 |
|
引っ込み思案。 |
|
指定した宛先のルーティング インターフェイス変更の通知を発行します。 |
|
ソケットのアドレス ファミリのローカル アドレス一覧の変更の通知を発行します。 |
[out] lpErrno
エラー コードへのポインター。 詳細については、「戻り値」セクションを参照してください。
戻り値
Windows ソケット SPI クライアントによるネットワーク イベントの指定と、関連付けられているイベント オブジェクトが成功した場合、戻り値は 0 です。 それ以外の場合は、
エラー コード | 意味 |
---|---|
|
ネットワーク サブシステムが失敗しました。 |
|
指定したパラメーターのいずれかが無効であったか、指定したソケットが無効な状態であることを示します。 |
|
Windows ソケット呼び出しのブロックが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。 |
|
記述子はソケットではありません。 |
備考
この関数は、選択したネットワーク イベントに関連付けるイベント オブジェクト (hEventObject
LPWSPEventSelect
この関数は、lNetworkEventsの値に関係なく、ソケット
ソケットに
rc = WSPEventSelect(s, hEventObject, FD_READ | FD_WRITE);
ネットワーク イベントごとに異なるイベント オブジェクトを指定することはできません。 次のコードは機能しません。2 番目の呼び出しは最初の呼び出しの影響を取り消し、唯一の関連付けは hEventObject2 に関連付けられたFD_WRITEネットワーク イベントになります。
// Incorrect example.
rc = WSPEventSelect(s, hEventObject1, FD_READ);
rc = WSPEventSelect(s, hEventObject2, FD_WRITE);
ソケット上のネットワーク イベントの関連付けと選択を取り消すには、lNetworkEvents を 0 に設定する必要があります。この場合、hEventObject パラメーターは無視されます。
rc = WSPEventSelect(s, hEventObject, 0);
LPWSPAccept'ed ソケットは、それを受け入れるために使用されるリッスン ソケットと同じプロパティを持っているため、リッスンソケットに設定された LPWSPEventSelect 関連付けとネットワーク イベントの選択は、受け入れられたソケットに適用されます。 たとえば、リッスン ソケットが、FD_ACCEPT、FD_READ、およびFD_WRITE hEventObject の関連付けを LPWSPEventSelect している場合、そのリッスン ソケットで受け入れられるソケットには、同じ hEventObjectに関連付けられたFD_ACCEPT、FD_READ、およびFD_WRITEネットワーク イベントも含まれます。 別の
ネットワーク イベントの発生を正常に記録し、関連付けられたイベント オブジェクトに通知した後、Windows Sockets SPI クライアントがそのネットワーク イベントの設定と関連付けられたイベント オブジェクトのシグナル通知を暗黙的に有効にする関数呼び出しを行うまで、そのネットワーク イベントに対してそれ以上のアクションは実行されません。
ネットワーク イベント | 関数の再有効化 |
---|---|
FD_READ | LPWSPRecv または LPWSPRecvFrom |
FD_WRITE | LPWSPSend または LPWSPSendTo |
FD_OOB | LPWSPRecv または LPWSPRecvFrom |
FD_ACCEPT | LPWSPAccept |
FD_CONNECT | 何一つ |
FD_CLOSE | 何一つ |
FD_QOS | SIO_GET_QOSを使用して LPWSPIoctl を |
FD_GROUP_QOS | ソケット グループでの将来の使用のために予約済み: SIO_GET_GROUP_QOSを使用した LPWSPIoctl |
FD_ROUTING_INTERFACE_CHANGE | コマンド SIO_ROUTING_INTERFACE_CHANGEを使用して LPWSPIoctl を |
FD_ADDRESS_LIST_CHANGE | コマンド SIO_ADDRESS_LIST_CHANGEを使用して LPWSPIoctl を |
再有効化ルーチン (失敗したルーチンも含む) を呼び出すと、関連するネットワーク イベントとイベント オブジェクトの記録とシグナル通知が再度有効になります。
FD_READ、FD_OOB、およびFD_ACCEPTネットワーク イベントの場合、ネットワーク イベントの記録とイベント オブジェクトのシグナル通知は、レベルによってトリガーされる
- サービス プロバイダーは、ソケット で 100 バイトのデータを受信し、FD_READネットワーク イベントを記録し、関連付けられているイベント オブジェクトに通知します。
- Windows ソケット SPI クライアントは、50 バイトの読み取り
WSPRecv(s, buffptr, 50, 0)
を発行します。 - サービス プロバイダーは、FD_READネットワーク イベントを記録し、読み取るデータが残っているため、関連付けられているイベント オブジェクトに再度通知します。
これらのセマンティクスでは、Windows ソケット SPI クライアントは、FD_READネットワーク イベントに応答して使用可能なすべてのデータを読み取る必要はありません。 代わりに、各FD_READネットワーク イベントに応答する 1 つの LPWSPRecv が適切です。
FD_QOSイベントとFD_GROUP_QOS イベントは、エッジ によってトリガーされる
FD_ROUTING_INTERFACE_CHANGEイベントとFD_ADDRESS_LIST_CHANGE イベントは、エッジによってトリガーされる
Windows ソケット SPI クライアントが LPWSPEventSelect
- Windows ソケット SPI クライアントは、LPWSPListen
呼び出します。 - 接続要求は受信されますが、まだ受け入れられません。
- Windows ソケット SPI クライアントは、LPWSPEventSelect を呼び出、ソケットのFD_ACCEPT ネットワーク イベントに関心があることを指定します。 サービス プロバイダーは、FD_ACCEPTネットワーク イベントを記録し、関連付けられているイベント オブジェクトを直ちに通知します。
FD_WRITE ネットワーク イベントは、若干異なる方法で処理されます。 FD_WRITE ネットワーク イベントは、ソケットが最初に LPWSPConnect
FD_OOB ネットワーク イベントは、帯域外データを個別に受信するようにソケットが構成されている場合にのみ使用されます。 ソケットが帯域外データをインラインで受信するように構成されている場合、帯域外 (優先) データは通常のデータとして扱われ、Windows Sockets SPI クライアントはネットワーク イベント FD_OOBではなく、ネットワーク イベントFD_READ関心を登録し、取得FD_READ必要があります。 Windows ソケット SPI クライアントは、SO_OOBINLINE オプションに対して LPWSPSetSockOpt または LPWSPGetSockOpt
FD_CLOSE ネットワーク イベントのエラー コードは、ソケットの閉じ方が正常か中止かを示します。 エラー コードが 0 の場合、閉じは正常でした。エラー コードが WSAECONNRESET の場合、ソケットの仮想回線がリセットされました。 これは、SOCK_STREAMなどの接続指向ソケットにのみ適用されます。
FD_CLOSE ネットワーク イベントは、ソケットに対応する仮想回線に対してクローズ表示が受信されたときに記録されます。 TCP では、これは、接続が FIN WAIT または CLOSE WAIT 状態になったときにFD_CLOSEが記録されることを意味します。 これは、リモート 側で送信側で
サービス プロバイダーは、仮想回線のクローズを示すために、FD_CLOSE ネットワーク イベント
FD_QOSまたはFD_GROUP_QOSのネットワーク イベントは、ソケット
FD_ROUTING_INTERFACE_CHANGE ネットワーク イベントは、このような IOCTL が発行された後に、WSAIoctl で指定された宛先
FD_ADDRESS_LIST_CHANGE ネットワーク イベントは、SIO_ADDRESS_LIST_CHANGEを使用して WSAIoctl を
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 ビルド 20348 |
サポートされる最小サーバー | Windows 10 ビルド 20348 |
ヘッダー | ws2spi.h |
関連項目
LPWSPEnumNetworkEvents の