为什么用IRF_NO_WAIT标志调用InternetReadFileEx函数仍然等待?

时间:2009-06-20 21:34:08

标签: winapi wininet

我正在使用同步wininet请求并使用IRF_NO_WAIT标志调用InternetReadFileEx(),但该函数仍然阻止等待数据。那是为什么?

3 个答案:

答案 0 :(得分:1)

MSDN docs中,IRF_NO_WAIT的含义描述为:

  

不要等待数据。如果有可用数据,该函数将返回请求的数据量或可用数据量(以较小者为准)。

神秘的是,它留下了 not 数据未定义的情况。显然,如果有 no 数据,它会阻塞,直到有一些。

答案 1 :(得分:1)

一种可能的解决方法是使用InternetQueryOption()获取INTERNET_DIAGNOSTIC_SOCKET_INFO结构,然后将SOCKET句柄传递给:: select(),超时为{0,0},以确定数据是否可用而不会阻塞。

答案 2 :(得分:0)

IRF_NO_WAIT的含义是不等待所有所请求的数据缓冲区被填充。但是,它仍会等待某些数据到达。如果没有数据到达,则会阻止。