GetQueuedCompletionStatus и нулевые байты приема WSARecv

Позвольте задать вопрос в продолжении темы:Достающий задачу из порта завершения GetQueuedCompletionStatus - глючит?

Суть такая:

Предположим я делаю запрос на сервер, который условно раз в час выдает данные о температуре. Соответвенно я использую WSASend, WSARecv и порты завершения Windows.

И проблемка такая:

  1. Условно я отправил с помощью WSASend() сообщение на сервер с условным запросом, что я готов получать данные.

  2. С помощью GetQueuedCompletionStatus() достаю "готовый пакет завершения" говорящий о том, что WSASend успешно завершился.

  3. Теперь вызываю WSARecv() на чтение данных, которые должен отправить удаленный сервер.

  4. С помощью GetQueuedCompletionStatus() достаю "готовый пакет завершения" говорящий о том, что данные с сервера получены и записаны в предоставленный буфер.

    И вроде бы все нормально. Но, в следующий час или в любой другой произвольный момент времени - мне нужно получить новую порцию данных о температуре, сокет естественно не закрывается, а поддерживается соединение keep-alive. То есть:

  5. Я опять вызываю WSARecv() на чтение, и запускаю GetQueuedCompletionStatus() - ожидая, следующей порции данных с сервера, НО из за проблемы описанной в указанной в самом начале темы - GetQueuedCompletionStatus() сразу же достанет "готовый пакет завершения" с нулевым кол-вом байт. И так бесконечно и непрерывно.

В итоге получается, что следующая порция данных с сервера условно придёт через час и весь этот часть в цикле непрерывно будет крутится вызов GetQueuedCompletionStatus() - возвращая информацию о том, что получено 0 байт.

И как тут быть непонятно.


Ответы (0 шт):