我正在使用同步wininet请求并使用IRF_NO_WAIT
标志调用InternetReadFileEx()
,但该函数仍然阻止等待数据。那是为什么?
答案 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的含义是不等待所有所请求的数据缓冲区被填充。但是,它仍会等待某些数据到达。如果没有数据到达,则会阻止。