ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Баг или фича?



Добрый день,
 
Под FreeBSD обнаружил проблему с обрезанием страниц больших 32 Кб,
под Linux больших 12 КБ, который отдаются в chain-ах из памяти
(без in_file = 1, т.е. без использования временных файлов, через writev).
 
Расследование привело к условию ниже:
 
src/os/unix/ngx_freebsd_sendfile_chain.c:399
src/os/unix/ngx_linux_sendfile_chain.c:360
 
if (!complete) {
   wev->ready = 0;
   return cl;
}
Если закомментировать этот блок/условие, то страницы отдаются полностью,
но появляется много записей в логах типа этой:
 
writev() not ready (11: Resource temporarily unavailable)
Какой смысл несет условие выше, и как можно решить эту проблему
более прямым способом? Неужели нельзя вернуться и продолжить запись?
 
Насколькоя понял, writev гарантировано успевает передать заголовки,
затем пытается передать тело, но передает только сколько влезет в системный буфер,
затем происходит выход по if (!complete) ,  после чего повторных попыток
продолжения записи не происходит.
 
И это на всех версиях nginx.
 
 


 




Copyright © Lexa Software, 1996-2009.