だから私はいくつかのWIN32ソケットプログラミングを行ってきました.Overlapped IOが好まれる理由を理解しようとしています. 特に、どうしてこんなことになったのか気になる
if (WSARecv(
socket,
dataBuf,
1,
NULL,
&flags,
&ov,
NULL)
== SOCKET_ERROR) {
if (WSAGetLastError() == WSA_IO_PENDING)
{
if (WSAWaitForMultipleEvents(1, &ov.hEvent, FALSE, INFINITE, FALSE) == WAIT_TIMEOUT)
{
return FALSE;
}
} else {
return FALSE;
}
}
// ... more code here
return TRUE;
このような通常の IO 呼び出しよりも優先されます
recv(socket, dataBuf, bufLen), 0);
私の理解では、IO イベントが WSAWaitForMultipleEvents で完了しなかった場合、最初の呼び出しはブロックされますが、2 番目の呼び出しは、データが到着するまで recv で直接ブロックされます。では、IO 呼び出しブロックを少し遅らせることの実際の利点は何でしょうか? 待つ前にできることがあれば、それをするということですか?
その場合、オーバーラップ IO は、データが到着するまで何もできないアプリケーションで価値がある/必要ですか?