GetQueuedCompletionStatus и нулевые байты приема WSARecv
Позвольте задать вопрос в продолжении темы:Достающий задачу из порта завершения GetQueuedCompletionStatus - глючит?
Суть такая:
Предположим я делаю запрос на сервер, который условно раз в час выдает данные о температуре. Соответвенно я использую WSASend, WSARecv и порты завершения Windows.
И проблемка такая:
Условно я отправил с помощью WSASend() сообщение на сервер с условным запросом, что я готов получать данные.
С помощью GetQueuedCompletionStatus() достаю "готовый пакет завершения" говорящий о том, что WSASend успешно завершился.
Теперь вызываю WSARecv() на чтение данных, которые должен отправить удаленный сервер.
С помощью GetQueuedCompletionStatus() достаю "готовый пакет завершения" говорящий о том, что данные с сервера получены и записаны в предоставленный буфер.
И вроде бы все нормально. Но, в следующий час или в любой другой произвольный момент времени - мне нужно получить новую порцию данных о температуре, сокет естественно не закрывается, а поддерживается соединение keep-alive. То есть:
Я опять вызываю WSARecv() на чтение, и запускаю GetQueuedCompletionStatus() - ожидая, следующей порции данных с сервера, НО из за проблемы описанной в указанной в самом начале темы - GetQueuedCompletionStatus() сразу же достанет "готовый пакет завершения" с нулевым кол-вом байт. И так бесконечно и непрерывно.
В итоге получается, что следующая порция данных с сервера условно придёт через час и весь этот часть в цикле непрерывно будет крутится вызов GetQueuedCompletionStatus() - возвращая информацию о том, что получено 0 байт.
И как тут быть непонятно.