LPWSPSELECT コールバック関数 (ws2spi.h)
LPWSPSelect 関数は、1 つ以上のソケットの状況を判別します。
構文
LPWSPSELECT Lpwspselect;
int Lpwspselect(
[in] int nfds,
[in, out] fd_set *readfds,
[in, out] fd_set *writefds,
[in, out] fd_set *exceptfds,
[in] const timeval *timeout,
[out] LPINT lpErrno
)
{...}
パラメーター
[in] nfds
互換性のためにのみ無視され、含まれます。
[in, out] readfds
読みやすくするためにチェックするソケットのセットへのオプションのポインター。
[in, out] writefds
書き込み可能かどうかを確認するソケットのセットへのオプションのポインター。
[in, out] exceptfds
エラーをチェックするソケットのセットへの省略可能なポインター。
[in] timeout
LPWSPSelect
[out] lpErrno
エラー コードへのポインター。
戻り値
LPWSPSelect 関数は、準備ができて fd_set 構造体に含まれている記述子の合計数、またはエラーが発生した場合にSOCKET_ERRORを返します。 戻り値がSOCKET_ERRORの場合は、lpErrno
エラー コード | 意味 |
---|---|
|
Windows ソケット サービス プロバイダーは、内部操作に必要なリソースを割り当てることができませんでした。または、readfds、writefds、exceptfds、または timeval パラメーターがユーザー アドレス空間の一部ではありません。 |
|
ネットワーク サブシステムが失敗しました。 |
|
|
|
(ブロッキング) 呼び出しは、LPWSPCancelBlockingCall |
|
Windows ソケット呼び出しのブロックが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。 |
|
記述子セットの 1 つに、ソケットではないエントリが含まれています。 |
備考
この関数は、1 つ以上のソケットの状態を判断するために使用されます。 各ソケットについて、呼び出し元は読み取り、書き込み、またはエラーの状態に関する情報を要求できます。 特定の状態が要求されるソケットのセットは、fd_set 構造体によって示されます。
fd_set 内のすべてのエントリは、サービス プロバイダーによって作成されたソケットに対応します (つまり、プロトコルを記述する WSAPROTOCOL_INFO 構造体は、providerId 値が同じです)。 戻ると、指定した条件を満たすこれらのソケットのサブセットを反映するように構造体が更新され、LPWSPSelect
readfds
接続指向ソケットの場合、読みやすさは、ピアからクローズ要求が受信されたことを示すこともできます。 仮想回線が正常に閉じられた場合、LPWSPRecv は、読み取られた 0 バイトで直ちに返されます。 仮想回線がリセットされた場合、LPWSPRecv はすぐに完了し、WSAECONNRESET などのエラー コードが表示されます。 ソケット オプション SO_OOBINLINEが有効になっている場合、OOB データの存在が確認されます (LPWSPSetSockOpt
writefds
- ソケットが LPWSPConnect
経由で接続している場合、書き込み可能性は、接続の確立が正常に完了したことを意味します。 - ソケットが LPWSPConnectをリッスン
処理中でない場合、書き込み可能性は、 またはLPWSPSend が成功することが保証されることを意味します。LPWSPSendTo
ただし、len が使用可能なシステム バッファー領域の量を超えると、ブロック ソケットでブロックされる可能性があります。 特にマルチスレッド環境では、これらの保証が有効であると想定できる期間は指定されていません。
exceptfds
任意の 2 つの
概要: LPWSPSelect
パラメーター | 形容 |
---|---|
readfds: | LPWSPListen |
writefdsを |
LPWSPConnect (非ブロッキング) |
exceptfdsを |
LPWSPConnect (非ブロッキング) |
3 つのマクロと 1 つの upcall 関数が、記述子セットを操作およびチェックするために、ヘッダー ファイル Ws2spi.h に定義されています。 変数FD_SETSIZEは、セット内の記述子の最大数を決定します。 (FD_SETSIZE の既定値は 64 で、Ws2spi.h を #including する前に別の値に #defining FD_SETSIZE することで変更できます)。内部的には、fd_set 内のソケット ハンドルは、バークレイ UNIX のようにビット フラグとして表されません。 それらのデータ表現は不透明です。 これらのマクロを使用すると、異なるソケット環境間でソフトウェアの移植性が維持されます。
fd_set の内容を操作および確認するマクロは次のとおりです。
-
FD_CLR(s, *set)
-
セットから記述子
削除します。 -
FD_SET(s, *set)
-
セットに記述子
追加します。 -
FD_ZERO(*set)
-
null セットにセットを初期化します。
メンバーシップを確認するために使用される upcall 関数は次のとおりです。
-
intWPUFDIsSet (SOCKETs, FD_SET FAR *set);
-
セットのメンバーである場合は 0 以外の値を返 。それ以外の場合は 0 を返します。
パラメーター タイムアウト は、LPWSPSelect が完了するまでの時間を制御します。 タイムアウト が null ポインターである場合、LPWSPSelect は、少なくとも 1 つの記述子が指定された条件を満たすまで無期限にブロックされます。 それ以外の場合、
手記
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ヘッダー | ws2spi.h |
関連項目
LPWSPAccept の
LPWSPConnect を
LPWSPEventSelect の
LPWSPRecv を
LPWSPSend を