В мире Unix хорошо известно, что чтение из файлового дескриптора может быть успешным и не даст вам все данные, которые вы запрашивали.Вы должны специально проверить.
Мне интересно, верно ли то же самое в Windows.Мы выполняем синхронное чтение, ничего асинхронного не происходит, но мы используем перекрывающуюся структуру, чтобы мы могли указать и смещение, и длину для чтения.
This ...
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365467(v=vs.85).aspx
говорит:
Функция ReadFile возвращается, когда происходит одно из следующих условий: прочитано число запрошенных байтов.
, а также:
Если lpOverlapped не равно NULL, операция чтения начинается со смещения, указанного в структуре OVERLAPPED, и ReadFile не возвращается, пока операция чтения не будет завершена.Система обновляет смещение OVERLAPPED до того, как ReadFile вернет.
И, наконец, говорится:
Для параметра lpNumberOfBytesRead должно быть установлено значение NULL.Используйте функцию GetOverlappedResult, чтобы получить фактическое количество прочитанных байтов.
Но на самом деле происходит успешное возвращение, но количество прочитанных байтов (от вызова GetOverlappedResult) меньше, чем мы просили.
Нигде в этой документации даже не подразумевается, что это может произойти, но это, безусловно, происходит.
Что я делаю не так?