1

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

4

3 回答 3

1

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

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

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

于 2009-06-20T21:38:50.010 回答
1

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

于 2009-06-25T23:11:22.607 回答
0

IRF_NO_WAIT 的意思是不等待所有请求的数据缓冲区被填满。但是,它仍然会等待一些数据到达。如果没有数据到达,它会阻塞。

于 2009-06-20T21:36:33.307 回答