http качалка

...
  • виснет намертво вся система, включая qemu (похоже на баг сетевого стека, т.к. httpc тоже виснет).
    Ага, это действительно баг сетевого стека, мне уже сообщили. Под VirtualBox тоже виснет вся система. Скриншоты снял (очень похоже на то, что где-то то ли стек не восстанавливается, то ли его содержимое перезаписывается чем-то), весь трафик сдампил, буду разбираться...
    Ушёл к умным, знающим и культурным людям.
  • В общем, сервер www.yandex.ru слишком быстрый для httpc :) Побайтовое чтение из сокета - вещь на редкость тормозная (особенно в текущей реализации), так что функция 53.3 крайне не рекомендуется, а вместо неё следует использовать 53.11. Конкретно httpc просто не успевал считывать все данные, а поступали всё новые и новые, что быстро приводило к переполнению буфера для данных сокета со всеми вытекающими последствиями. В svn.1019 добавил проверку на переполнение, переполняющие пакеты тупо отбрасываются в надежде на tcp-перепосылку, система больше не виснет, но необходимости перехода на 53.11 это не отменяет.
    Ушёл к умным, знающим и культурным людям.
  • С новым ядром httpc успешно открывает http://www.yandex.ru, но wget просто падает. Снимки доски отладки прилагаю.
    Attachments
    вывод приложения
    board2k.png (3.95 KiB)
    вывод приложения Viewed 14968 times
    вывод ядра
    board1k.png (5.25 KiB)
    вывод ядра Viewed 14973 times
  • diamond
    Перевел wget на 53.11 (чтение из сокета группы байт вместо побайтового чтения) и убрал задержку при чтении. Теперь yandex.ru открывается и скачивается (даже похож на правильный, если смотреть на код). Сейчас буду писать поддержку командной строки.
    Attachments
    wget.7z (9.2 KiB)
    Downloaded 445 times
  • ура ура ура))

    извините за флуд)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • diamond, а если происходит переполнение, а приложение, заказавшее данные, прибить, то буфер остается заполненным навечно и с сетью до перезагрузки работать невозможно?
  • Так, www.yandex.ru уже грузится.
    Следующий тест: www.wasm.ru не грузится. На доску отладки выводится "1FF0 content-length not found" и программа аварийно завершается.
    Кстати, функции 53.11 нужно всё-таки передавать значение в esi - размер буфера, а то сейчас esi вообще не инициализируется, иногда это приводит к вылету программы из-за кода ядра.
  • barsuk wrote:diamond, а если происходит переполнение, а приложение, заказавшее данные, прибить, то буфер остается заполненным навечно и с сетью до перезагрузки работать невозможно?
    Переполнение вообще влияет только на один сокет, и кривая работа с одним сокетом не влияет на остальные сокеты.
    Ушёл к умным, знающим и культурным людям.
  • Кстати, функции 53.11 нужно всё-таки передавать значение в esi - размер буфера, а то сейчас esi вообще не инициализируется, иногда это приводит к вылету программы из-за кода ядра.
    Спасибо, забыл написать.

    На wasm.ru используется Chunked transfer encoding, и заголовка Content-Length, на который я раньше ориентировался для определения размера буфера, нет. Буду разбираться.
  • Готова версия, которая способна скачать: 1) www.yandex.ru, 2) www.wasm.ru.
    Поменял название на downloader, т.к. это все же не wget :)
    Запускается также из командной строки, после завершения загрузки закрывается.
    Attachments
    downloader-0.8.7z (10.62 KiB)
    Downloaded 448 times
  • Протестировал. Падает, причём на всём подряд. На рамдиск сбрасывается файл A, но он явно обрывается посередине.
    Attachments
    downbug.png
    downbug.png (5.17 KiB)
    Viewed 14753 times
    Ушёл к умным, знающим и культурным людям.
  • А оно падает при запуске из командной строки или через gui?
  • И через командную строку, и через GUI.
  • Падение исправил.
    Подумал, что кидать результат в /rd/1/a нехорошо. Теперь он попадает в /rd/1/.download.

    Добавил маленькую либу и пример работы с ней. Сейчас либа вызывает downloader с указанным параметром, но в будущем, возможно, я перенесу всю работу по скачиванию файла в нее. То есть в сторонних приложения рекомендуется юзать именно либу.
    Attachments
    downloader-0.82.7z (11.82 KiB)
    Downloaded 489 times
  • Who is online

    Users browsing this forum: No registered users and 4 guests