<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=koi8-r">
<META content="MSHTML 6.00.2900.3132" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Добрый день,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Под FreeBSD обнаружил проблему с обрезанием страниц
больших 32 Кб,</FONT></DIV>
<DIV><FONT face=Arial size=2>под Linux больших 12 КБ, который отдаются в
chain-ах из памяти </FONT></DIV>
<DIV><FONT face=Arial size=2>(без in_file = 1, т.е. без использования временных
файлов, через writev).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Расследование привело к условию ниже:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial
size=2>src/os/unix/ngx_freebsd_sendfile_chain.c:399</FONT></DIV>
<DIV><FONT face=Arial
size=2>src/os/unix/ngx_linux_sendfile_chain.c:360</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>if (!complete) {<BR> wev->ready =
0;<BR> return cl;<BR>}<BR></FONT></DIV>
<DIV><FONT face=Arial size=2>Если закомментировать этот блок/условие,
то страницы отдаются полностью,</FONT></DIV>
<DIV><FONT face=Arial size=2>но появляется много записей в логах типа
этой:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>writev() not ready (11: Resource temporarily
unavailable)<BR></FONT></DIV>
<DIV><FONT face=Arial size=2>Какой смысл несет условие выше, и как можно решить
эту проблему </FONT></DIV>
<DIV><FONT face=Arial size=2>более прямым способом? Неужели нельзя вернуться и
продолжить запись?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Насколькоя понял, writev гарантировано успевает
передать заголовки,</FONT></DIV>
<DIV><FONT face=Arial size=2>затем пытается передать тело, но передает только
сколько влезет в системный буфер,</FONT></DIV>
<DIV><FONT face=Arial size=2>затем происходит выход по if
(!complete) , после чего повторных попыток </FONT></DIV>
<DIV><FONT face=Arial size=2>продолжения записи </FONT><FONT face=Arial
size=2>не происходит.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>И это на всех версиях nginx.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> </DIV></FONT></BODY></HTML>