WSAPoll 関数 (winsock2.h)
WSAPoll 関数は、1 つ以上のソケットの状態を決定します。
構文
int WSAAPI WSAPoll(
[in, out] LPWSAPOLLFD fdArray,
[in] ULONG fds,
[in] INT timeout
);
パラメーター
[in, out] fdArray
状態が要求されるソケットのセットを指定する 1 つ以上の POLLFD 構造体の配列。 配列には、有効なソケットを持つ構造体が少なくとも 1 つ含まれている必要があります。 戻ると、このパラメーターは更新されたソケットを受け取り、状態クエリ条件に一致する各ソケットに revents 状態フラグ メンバーが設定されます。
[in] fds
fdarray 内の WSAPOLLFD 構造体の数。 これは必ずしも、状態が要求されるソケットの数であるとは限りません。
[in] timeout
次の値に基づいて待機動作を指定する 値。
値 | 意味 |
---|---|
0 より大きい値 | 待機する時間 (ミリ秒単位)。 |
ゼロ | すぐに返します。 |
0 より小さい値 | 無期限に待機します。 |
戻り値
次のいずれかの値を返します。
戻り値 | 説明 |
---|---|
ゼロ | タイマーの有効期限が切れる前に、クエリされた状態のソケットがありませんでした。 |
0 より大きい値 | POLLFD 構造体の revents メンバーが 0 以外である fdarray 内の要素の数。 |
SOCKET_ERROR | エラーが発生しました。 WSAGetLastError 関数を呼び出して、拡張エラー コードを取得します。 |
拡張エラー コード | 意味 |
---|---|
ネットワーク サブシステムが失敗しました。 | |
ユーザー入力パラメーターの読み取り中に例外が発生しました。 | |
無効なパラメーターが渡されました。 ソケットの状態を要求するときに fdarray パラメーターが指す WSAPOLLFD 構造体の場合、このエラーが返されます。 このエラーは、fdarray パラメーターが指す WSAPOLLFD 構造体の fd メンバーで指定されたソケットがいずれも有効でない場合にも返されます。 | |
関数で十分なメモリを割り当てることができませんでした。 |
注釈
WSAPoll 関数は、Windows Vista 以降で定義されています。
WSAPOLLFD 構造体。 アプリケーションは、WSAPOLLFD 構造体の events メンバーに適切なフラグを設定して、対応するソケットごとに要求される状態の種類を指定します。 WSAPoll 関数は、WSAPOLLFD 構造体の revents メンバー内のソケットの状態を返します。
ソケットごとに、呼び出し元は読み取りまたは書き込みの状態に関する情報を要求できます。 エラー条件は常に返されるため、それらに関する情報を要求する必要はありません。
fdarray パラメーターが指す WSAPOLLFD 構造体。 これらの条件を満たせず、エラー条件がないすべてのソケットでは、対応する revents メンバーが 0 に設定されます。
そのソケットの状態を要求するときに、特定のソケットの WSAPOLLFD 構造体で、次のフラグの組み合わせを設定できます。
フラグ | 説明 |
---|---|
POLLPRI | 優先度データは、ブロックせずに読み取られる場合があります。 このフラグは、Microsoft Winsock プロバイダーではサポートされていません。 |
POLLRDBAND | 優先度帯 (帯域外) データは、ブロックせずに読み取られる場合があります。 |
POLLRDNORM | 通常のデータはブロックせずに読み取られる場合があります。 |
POLLWRNORM | 通常のデータはブロックせずに書き込まれる場合があります。 |
POLLIN フラグは、POLLRDNORM フラグ値と POLLRDBAND フラグ値の組み合わせとして定義されます。 POLLOUT フラグは、POLLWRNORM フラグ値と同じとして定義されます。
WSAPOLLFD 構造体には、Winsock プロバイダーでサポートされている上記のフラグの組み合わせのみが含まれている必要があります。 その他の値はエラーと見なされ、 WSAPoll は SOCKET_ERRORを返します。 その後 WSAGetLastError 関数を呼び出すと、WSAEINVAL の拡張エラー コードが取得されます。 MICROSOFT Winsock プロバイダーのソケットに POLLPRI フラグが設定されている場合、 WSAPoll 関数は失敗します。
ソケットの状態を示すために fdarray パラメーターが指す WSAPOLLFD 構造体の場合:
フラグ | 説明 |
---|---|
POLLERR | 問題が発生しました。 |
POLLHUP | ストリーム指向の接続が切断または中止されました。 |
POLLNVAL | 無効なソケットが使用されました。 |
POLLPRI | 優先度データは、ブロックせずに読み取られる場合があります。 このフラグは、Microsoft Winsock プロバイダーからは返されません。 |
POLLRDBAND | 優先度帯 (帯域外) データは、ブロックせずに読み取られる場合があります。 |
POLLRDNORM | 通常のデータはブロックせずに読み取られる場合があります。 |
POLLWRNORM | 通常のデータはブロックせずに書き込まれる場合があります。 |
TCP および UDP ソケットに関して:
- WSAPOLLFD 構造体は、通常のデータとして POLLRDNORM として使用されます。
- WSAPOLLFD 構造体では、後続の recv 操作がブロックされずに完了することが保証されます。
- POLLWRNORM による WSAPOLLFD 構造体。
- POLLRDNORM による WSAPOLLFD 構造体。 後続の accept の呼び出しは、ブロックせずに完了することが保証されます。
- POLLRDBAND による WSAPOLLFD 構造体。
- WSAPOLLFD 構造体は、リモート ピアが 送信 操作をシャットダウンしたとき (TCP FIN が受信されました)。 後続の recv 関数要求では、0 バイトが返されます。
- リモート ピアが正常な切断を開始するときの WSAPOLLFD 構造体。
- リモート ピアが突然切断されると、WSAPOLLFD 構造体が返されます。
- ローカル ソケットが閉じられたときの WSAPOLLFD 構造体。
fdarray 内の要素 (ソケットではなく) の数は nfds で示されます。 fd メンバーが負の値に設定されている fdarray のメンバーは無視され、再発明は戻り時に POLLNVAL に設定されます。 この動作は、固定 fdarray 割り当てを維持し、未使用のエントリを削除したりメモリを再割り当てしたりするために配列を圧縮しないアプリケーションに役立ちます。 WSAPoll を呼び出す前に、要素の再発明をクリアする必要はありません。
timeout 引数は、関数が返されるまでの待機時間を指定します。 正の値には、返されるまでに待機するミリ秒数が含まれます。 値が 0 の場合、 WSAPoll は直ちに戻り、負の値は WSAPoll が無期限に待機する必要があることを示します。
Windows 8.1とWindows Server 2012 R2: この関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1、Windows Vista [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winsock2.h (Winsock2.h を含む) |
Library | Ws2_32.lib |
[DLL] | Ws2_32.dll |