WSAGetOverlappedResult 関数 (winsock2.h)
WSAGetOverlappedResult 関数は、指定されたソケットで重複した操作の結果を取得します。
構文
BOOL WSAAPI WSAGetOverlappedResult(
[in] SOCKET s,
[in] LPWSAOVERLAPPED lpOverlapped,
[out] LPDWORD lpcbTransfer,
[in] BOOL fWait,
[out] LPDWORD lpdwFlags
);
パラメーター
[in] s
ソケットを識別する記述子。
これは、重複した操作をサポートする Winsock 関数の呼び出しによって重複する操作が開始されたときに指定されたソケットと同じです。 これらの関数には、AcceptEx、ConnectEx、DisconnectEx、TransmitFile、TransmitPackets、WSARecv、WSARecvFrom、LPFN_WSARECVMSG (WSARecvMsg)、WSASend、WSASendMsg、WSASendTo、WSAIoctl が含まれます。
[in] lpOverlapped
重複した操作の開始時に指定された WSAOVERLAPPED 構造体へのポインター。 このパラメーターは NULL ポインターにすることはできません。
[out] lpcbTransfer
送受信操作または WSAIoctl 関数によって実際に転送されたバイト数を受け取る 32 ビット変数へのポインター。 このパラメーターは NULL ポインターにすることはできません。
[in] fWait
保留中の重複する操作が完了するまで関数を待機するかどうかを指定するフラグ。 TRUE の場合、関数は操作が完了するまで戻りません。 FALSE を指定しても操作が保留中の場合、この関数は FALSE を返し、WSAGetLastError 関数はWSA_IO_INCOMPLETEを返します。 fWait パラメーターは、重複した操作でイベント ベースの完了通知が選択されている場合にのみ TRUE に設定できます。
[out] lpdwFlags
完了状態を補完する 1 つ以上のフラグを受け取る 32 ビット変数へのポインター。 重複した操作が WSARecv または WSARecvFrom を介して開始された場合、このパラメーターには lpFlags パラメーターの結果値が含まれます。 このパラメーターは NULL ポインターにすることはできません。
戻り値
WSAGetOverlappedResult が成功した場合、戻り値は TRUE になります。 これは、重複した操作が正常に完了し、 lpcbTransfer が指す値が更新されたことを意味します。
WSAGetOverlappedResult が FALSE を返した場合、これは、重複した操作が完了していないか、重複した操作が完了したがエラーが発生したか、または WSAGetOverlappedResult に対する 1 つ以上のパラメーターのエラーが原因で、重複した操作の完了状態を特定できなかったことを意味します。 失敗した場合、 lpcbTransfer が指す値は更新されません。 WSAGetLastError を使用して、エラーの原因を特定します (WSAGetOverlappedResult 関数または関連する重複する操作のいずれかによって)。
エラー コード | 意味 |
---|---|
この関数を使用する前に 、WSAStartup 呼び出しが正常に行われる必要があります。 | |
ネットワーク サブシステムが失敗しました。 | |
記述子はソケットではありません。 | |
WSAOVERLAPPED 構造体の hEvent パラメーターに、有効なイベント オブジェクト ハンドルが含まれていません。 | |
パラメーターの 1 つは受け入れられません。 | |
fWait パラメーターは FALSE で、I/O 操作はまだ完了していません。 | |
1 つ以上の lpOverlapped、 lpcbTransfer、または lpdwFlags パラメーターが、ユーザー アドレス空間の有効な部分にありません。 このエラーは、 lpOverlapped、 lpcbTransfer、または lpdwFlags パラメーターが Windows Server 2003 以前の NULL ポインターであった場合に返されます。 |
注釈
WSAGetOverlappedResult 関数は、s パラメーターで指定されたソケットの lpOverlapped パラメーターで指定された重複した操作の結果を報告します。 WSAGetOverlappedResult 関数には、重複する関数が呼び出されたときに指定されたソケット記述子と WSAOVERLAPPED 構造体が渡されます。 保留中の操作は、操作を開始した関数が FALSE を 返し、 WSAGetLastError 関数が WSA_IO_PENDINGを返したときに示されます。 WSARecv などの I/O 操作が保留中の場合、操作を開始した関数は、WSAOVERLAPPED 構造体の hEvent メンバーを非署名状態にリセットします。 次に、保留中の操作が完了すると、システムはイベント オブジェクトをシグナル状態に設定します。
fWait パラメーターが TRUE の場合、WSAGetOverlappedResult は、イベント オブジェクトがシグナル状態になるのを待って、保留中の操作が完了したかどうかを判断します。 クライアントは fWait パラメーターを TRUE に設定できますが、I/O 操作が要求されたときにイベント ベースの完了通知を選択した場合に限られます。 別の形式の通知が選択されている場合、WSAOVERLAPPED 構造体の hEvent パラメーターの使用が異なり、fWait を TRUE に設定すると、予期しない結果が発生します。
windows Vista で lpOverlapped、lpcbTransfer、または lpdwFlags パラメーターを NULL ポインターに設定して WSAGetOverlappedResult 関数を呼び出すと、アクセス違反が発生します。 wsAGetOverlappedResult 関数が、lpOverlapped、lpcbTransfer、または lpdwFlags パラメーターを Windows Server 2003 以前の NULL ポインターに設定して呼び出されると、WSAEFAULT エラー コードが返されます。
Windows 8.1とWindows Server 2012 R2: この関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1、 Windows Vista [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winsock2.h |
Library | Ws2_32.lib |
[DLL] | Ws2_32.dll |