LINUX.ORG.RU

Ошибка EPIPE, используя браузер Android

 , , , ,


0

1

Написал демон на C++ под линукс. Обращаюсь к нему из браузера Android, указывая в адресной строке site.ru/file.typ. Если я указываю (вместо typ) расширение jpg - то файл качается без проблем, а если, например, apk - то выдаёт ошибку EPIPE.

Как я понимаю, если расширение файла, стандартное для веба, то нет проблем, а если другое, то EPIPE неизбежно.

Как решить проблему?



Последнее исправление: sitev_ru (всего исправлений: 1)

Упроядочишь файлы по авфавиту, в 4-ом файле на 146 строке ошибка.

Исправление - тривиальное. Сам поймешь, когда газами посмотришь.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Как я понимаю, без исходников никуда... Подготовлю, выложу - черкну сюда, может кто что и подскажет...

sitev_ru
() автор топика
Ответ на: комментарий от sitev_ru

Не надо все исходники, их никто читать не будет.

Проставь в демоне вывод логов, найди место, в котором возникает ошибка. Оттуда уже можно будет копать.

Еще лучше - запусти демон под gdb и найди ошибку в 100500 раз быстрее.

trex6 ★★★★★
()
Ответ на: комментарий от anonymous

Это особое дао, постичь его можно только в одном из монастырей высокогорного Тибета.

trex6 ★★★★★
()

Как решить проблему?

Обрабатывать ошибки надо. EPIPE — обрыв соединения.

Как я понимаю, если расширение файла, стандартное для веба, то нет проблем, а если другое, то EPIPE неизбежно.

Это бессмысленное утверждение. Ошибки ты получаешь на уровне TCP, где есть только потоки байт. TCP стеку нет дела до того, что именно за байты ты шлёшь, он предназначен для передачи любых. Подозреваю, что браузер, скачав начало файла, проверяет его тип, а по результатам проверки решает дальше не качать.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Подозреваю, что браузер, скачав начало файла, проверяет его тип, а по результатам проверки решает дальше не качать.

Если запустить через апач, то качает с любым расширением...

sitev_ru
() автор топика
Ответ на: комментарий от sitev_ru

tcpdump, wireshark. Собрать пакеты, сравнить, понять в чём отличия.

Deleted
()
Ответ на: комментарий от trex6

Вчитался в логи, смотрю, вначале браузер делает запрос такой:

Accept-Encoding: gzip,deflate

А я ему не сжимаю ничего, а пересылаю как есть...

Он качает, через какое-то время сбрасывает и делает новый запрос:

Accept-Encoding: identity

Я ему передаю как есть и всё сразу нормально читает)... Архивировать gzip чтоли?

sitev_ru
() автор топика
Ответ на: комментарий от trex6

Написал демон
<ни бэ, ни мэ>

Проставь в демоне вывод логов

Возможно вы имели в виду: «Допиши»

t184256 ★★★★★
()
Ответ на: комментарий от sitev_ru

ничего не поменялось - все также и осталось... видимо нужно на «сотик» ставить tcpdump и анализировать, что шлёт апач, если через него скачивать файл

sitev_ru
() автор топика
Ответ на: комментарий от sitev_ru

Результат?
Может все же стоит Content-Encoding для любого случая выставлять?

P.S. Мне показалось, или у тебя Content - Length отдается клиенту с лишними пробелами вокруг дефиса? Или я плохо умею в HTTP?

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Разобрался... Потратил кучу времени, чтобы выяснить - просто так на моём китайском телефоне (хотя вроде хуавей хвалят) работает браузер...

sitev_ru
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.