-
Приветствую всех. Даже не думал, что такое может оказаться проблемой: Работаю с HTTP через IdHTTP, хватаю информацию о файлах через HEAD. Возник такой косяк: при возвращении в заголовке 404 инди "отпускает" поток только после таймаута (если убрать таймаут вообще наглухо виснет). Можно было бы сделать таймаут покороче, но тогда возникает риск потерять соединение из-за лага. Возможно, кому-то уже знаком данный случай, можно ли научить инди корректно обрабатывать подобные ситуации?
-
Ручной дебаг исходников инди привел мои поски к тому, что инди обрабатывают ошибки head как при при других методах, когда возвращается контент. И процесс виснет на попытке анализировать данный контент (при ContentLength > 0) через IOHandler, дальше указатель начал теряться (видимо, используется наследник IOHandler`а, а не "встроенный"), дальше не полез, просто для метода HEAD вырубил данную операцию, после этого виснуть результат перестал. Там же отключил ожидание контента в еще одном месте, в котором при коде 200 тоже иногда возникает повисание. Но это уже, судя по всему, косяк 10го инди, т.к. в семерочном такой байды не случалось. Хотя у обоих зависаний для 404 и 200 ниточки ведут в одну сторону - обработка TidCustomHTTP.ReadResult -> IOHandler.ReadStream, и здесь все заканчивается. Думаю, сделать локальную версию и прикрутить флаг "только результат" без дополнительных тон проверок.
|