1

同期の wininet 要求を使用InternetReadFileEx()してIRF_NO_WAITフラグを指定して呼び出していますが、関数はまだデータの待機をブロックしています。何故ですか?

4

3 に答える 3

1

考えられる回避策は、InternetQueryOption() を使用して INTERNET_DIAGNOSTIC_SOCKET_INFO 構造体を取得し、SOCKET ハンドルを {0, 0} のタイムアウトで ::select() に渡して、ブロックせずにデータが利用可能かどうかを判断することです。

于 2009-06-25T23:11:22.607 に答える
1

MSDN docsでは、の意味IRF_NO_WAITは次のように説明されています。

データを待ちません。使用可能なデータがある場合、関数は要求されたデータの量または使用可能なデータの量のいずれか小さい方を返します。

不思議なことに、利用可能なデータがない場合は未定義のままになります。どうやら、データがない場合は、ある程度になるまでブロックします。

于 2009-06-20T21:38:50.010 に答える
0

IRF_NO_WAIT が意味することは、要求されたデータ バッファーがすべて満たされるのを待たないことです。ただし、一部のデータが到着するまで待機します。データが到着しない場合、ブロックします。

于 2009-06-20T21:36:33.307 に答える