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 関数の呼び出しによって重複する操作が開始されたときに指定されたソケットと同じです。 これらの関数には、AcceptExConnectExDisconnectExTransmitFileTransmitPacketsWSARecvWSARecvFromLPFN_WSARECVMSG (WSARecvMsg)、WSASendWSASendMsgWSASendToWSAIoctl が含まれます。

[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 が指す値が更新されたことを意味します。

WSAGetOverlappedResultFALSE を返した場合、これは、重複した操作が完了していないか、重複した操作が完了したがエラーが発生したか、または WSAGetOverlappedResult に対する 1 つ以上のパラメーターのエラーが原因で、重複した操作の完了状態を特定できなかったことを意味します。 失敗した場合、 lpcbTransfer が指す値は更新されません。 WSAGetLastError を使用して、エラーの原因を特定します (WSAGetOverlappedResult 関数または関連する重複する操作のいずれかによって)。

エラー コード 意味
WSANOTINITIALIZED
この関数を使用する前に 、WSAStartup 呼び出しが正常に行われる必要があります。
WSAENETDOWN
ネットワーク サブシステムが失敗しました。
WSAENOTSOCK
記述子はソケットではありません。
WSA_INVALID_HANDLE
WSAOVERLAPPED 構造体の hEvent パラメーターに、有効なイベント オブジェクト ハンドルが含まれていません。
WSA_INVALID_PARAMETER
パラメーターの 1 つは受け入れられません。
WSA_IO_INCOMPLETE
fWait パラメーターは FALSE で、I/O 操作はまだ完了していません。
WSAEFAULT
1 つ以上の lpOverlappedlpcbTransfer、または lpdwFlags パラメーターが、ユーザー アドレス空間の有効な部分にありません。 このエラーは、 lpOverlappedlpcbTransfer、または 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 パラメーターの使用が異なり、fWaitTRUE に設定すると、予期しない結果が発生します。

windows Vista で lpOverlappedlpcbTransfer、または lpdwFlags パラメーターを NULL ポインターに設定して WSAGetOverlappedResult 関数を呼び出すと、アクセス違反が発生します。 wsAGetOverlappedResult 関数が、lpOverlappedlpcbTransfer、または lpdwFlags パラメーターを Windows Server 2003 以前の NULL ポインターに設定して呼び出されると、WSAEFAULT エラー コードが返されます。

メモ スレッドが終了すると、すべての I/O が取り消されます。 重複するソケットの場合、操作が完了する前にスレッドが閉じられた場合、保留中の非同期操作が失敗する可能性があります。 詳細については、「 ExitThread 」を参照してください。
 
Windows Phone 8: この関数は、Windows Phone 8 以降のWindows Phone ストア アプリでサポートされています。

Windows 8.1Windows 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

こちらもご覧ください

WSAAccept

WSAConnect

WSACreateEvent

WSAIoctl

WSARecv

WSARecvFrom

WSASend

WSASendTo

WSAWaitForMultipleEvents

Winsock 関数

Winsock リファレンス