Несколько непонятностей по nginx

Александр Ворона voron at amhost.net
Sat Apr 21 23:24:26 MSD 2007


Igor Sysoev пишет:
> On Sat, Apr 21, 2007 at 05:44:07PM +0400, Александр Ворона wrote:
> 
>> Igor Sysoev пишет:
>>> Дело в том, что lighttpd не использует EPOLLET, а nginx - использует.
>>> Когда патч в ядре ограничивает объём передаваемых данных, то происходит
>>> следующее - EPOLLET фиксирует состояние, что буфер свободен, об этом
>>> сообщается приоложению (nginx'у), он делает sendfile. sendfile быстро
>>> передаёт ограниченный объём, буфер по-видимому после этого полностью
>>> свободный и новое событие не приходит.
>> а как тогда должен отрабатывать nginx, если бы sendfile() действительно 
>> был неблокирующим(за что собственно и боремся) и быстро передавал 
>> ограниченный обьём?
> 
> sendfile должен вернуть, сколько он смог передать. nginx это фиксирует,
> выствляет таймаут на передачу и оставляет этот сокет в покое, пока
> epoll снова не сообщит об освободившемся месте.
> 

те sendfile() фактически должен сказать : "я пхнул в сокет столько-то и 
ушёл". nginx _после_ вызова sendfile() выставляет таймаут для сокета, в 
который sendfile() пхнул данные. И если данные уже успели улететь до 
постановки таймаута - события не придёт?






More information about the nginx-ru mailing list