Почему вызов функции InternetReadFileEx с флагом IRF_NO_WAIT все еще ждет? - PullRequest
1 голос
/ 21 июня 2009

Я использую синхронный запрос wininet и вызываю InternetReadFileEx() с флагом IRF_NO_WAIT, но функция все еще блокирует ожидание данных. Почему это так?

Ответы [ 3 ]

1 голос
/ 21 июня 2009

В MSDN документах значение IRF_NO_WAIT описывается следующим образом:

Не ждите данных.Если данные доступны, функция возвращает либо объем запрошенных данных, либо объем доступных данных (в зависимости от того, что меньше).

Таинственным образом выходит из случая, когда не данные доступны неопределенные.Очевидно, что если нет данных, они блокируются, пока их не будет.

1 голос
/ 26 июня 2009

Возможный обходной путь - использовать InternetQueryOption () для получения структуры INTERNET_DIAGNOSTIC_SOCKET_INFO, а затем передать дескриптор SOCKET в :: select () с таймаутом {0, 0}, чтобы определить, доступны ли данные без блокировки.

0 голосов
/ 21 июня 2009

Что означает IRF_NO_WAIT, так это не ждать, пока все запрошенного буфера данных будут заполнены. Однако он все еще будет ожидать поступления некоторых данных. Если данные не поступают, они блокируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...