Page 1 of 7

http качалка

Posted: Sat Jan 31, 2009 11:45 pm
by barsuk
Тебе только GET нужен, даже частичные запросы и кеширование не нужны, так что меняеш GET * HTTP/1.0 на GET * HTTP/1.1 и будет тебе счастье.
Все же пришлось добавить заголовки Host и Connection-type. Кое-что стало лучше. Загружается, например, страница menuetos.net.
Но почему-то при попытке скачать www.yandex.ru виснет намертво вся система, включая qemu (похоже на баг сетевого стека, т.к. httpc тоже виснет).

Re: http качалка

Posted: Sat Jan 31, 2009 11:51 pm
by diamond
виснет намертво вся система, включая qemu (похоже на баг сетевого стека, т.к. httpc тоже виснет).
Ага, это действительно баг сетевого стека, мне уже сообщили. Под VirtualBox тоже виснет вся система. Скриншоты снял (очень похоже на то, что где-то то ли стек не восстанавливается, то ли его содержимое перезаписывается чем-то), весь трафик сдампил, буду разбираться...

Re: http качалка

Posted: Sun Feb 01, 2009 2:34 pm
by diamond
В общем, сервер www.yandex.ru слишком быстрый для httpc :) Побайтовое чтение из сокета - вещь на редкость тормозная (особенно в текущей реализации), так что функция 53.3 крайне не рекомендуется, а вместо неё следует использовать 53.11. Конкретно httpc просто не успевал считывать все данные, а поступали всё новые и новые, что быстро приводило к переполнению буфера для данных сокета со всеми вытекающими последствиями. В svn.1019 добавил проверку на переполнение, переполняющие пакеты тупо отбрасываются в надежде на tcp-перепосылку, система больше не виснет, но необходимости перехода на 53.11 это не отменяет.

Re: http качалка

Posted: Mon Feb 02, 2009 2:30 pm
by diamond
С новым ядром httpc успешно открывает http://www.yandex.ru, но wget просто падает. Снимки доски отладки прилагаю.

Re: http качалка

Posted: Mon Feb 02, 2009 4:03 pm
by barsuk
diamond
Перевел wget на 53.11 (чтение из сокета группы байт вместо побайтового чтения) и убрал задержку при чтении. Теперь yandex.ru открывается и скачивается (даже похож на правильный, если смотреть на код). Сейчас буду писать поддержку командной строки.

Re: http качалка

Posted: Mon Feb 02, 2009 4:07 pm
by Gluk
ура ура ура))

извините за флуд)

Re: http качалка

Posted: Mon Feb 02, 2009 4:44 pm
by barsuk
diamond, а если происходит переполнение, а приложение, заказавшее данные, прибить, то буфер остается заполненным навечно и с сетью до перезагрузки работать невозможно?

Re: http качалка

Posted: Mon Feb 02, 2009 5:12 pm
by diamond
Так, www.yandex.ru уже грузится.
Следующий тест: www.wasm.ru не грузится. На доску отладки выводится "1FF0 content-length not found" и программа аварийно завершается.
Кстати, функции 53.11 нужно всё-таки передавать значение в esi - размер буфера, а то сейчас esi вообще не инициализируется, иногда это приводит к вылету программы из-за кода ядра.

Re: http качалка

Posted: Mon Feb 02, 2009 5:15 pm
by diamond
barsuk wrote:diamond, а если происходит переполнение, а приложение, заказавшее данные, прибить, то буфер остается заполненным навечно и с сетью до перезагрузки работать невозможно?
Переполнение вообще влияет только на один сокет, и кривая работа с одним сокетом не влияет на остальные сокеты.

Re: http качалка

Posted: Mon Feb 02, 2009 6:02 pm
by barsuk
Кстати, функции 53.11 нужно всё-таки передавать значение в esi - размер буфера, а то сейчас esi вообще не инициализируется, иногда это приводит к вылету программы из-за кода ядра.
Спасибо, забыл написать.

На wasm.ru используется Chunked transfer encoding, и заголовка Content-Length, на который я раньше ориентировался для определения размера буфера, нет. Буду разбираться.

Re: http качалка

Posted: Wed Feb 04, 2009 8:54 pm
by barsuk
Готова версия, которая способна скачать: 1) www.yandex.ru, 2) www.wasm.ru.
Поменял название на downloader, т.к. это все же не wget :)
Запускается также из командной строки, после завершения загрузки закрывается.

Re: http качалка

Posted: Sat Feb 07, 2009 7:18 pm
by diamond
Протестировал. Падает, причём на всём подряд. На рамдиск сбрасывается файл A, но он явно обрывается посередине.

Re: http качалка

Posted: Sat Feb 07, 2009 10:33 pm
by barsuk
А оно падает при запуске из командной строки или через gui?

Re: http качалка

Posted: Sat Feb 07, 2009 10:37 pm
by diamond
И через командную строку, и через GUI.

Re: http качалка

Posted: Thu Feb 12, 2009 5:45 pm
by barsuk
Падение исправил.
Подумал, что кидать результат в /rd/1/a нехорошо. Теперь он попадает в /rd/1/.download.

Добавил маленькую либу и пример работы с ней. Сейчас либа вызывает downloader с указанным параметром, но в будущем, возможно, я перенесу всю работу по скачиванию файла в нее. То есть в сторонних приложения рекомендуется юзать именно либу.