ПРОЕКТЫ 


  АРХИВ 


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]

По поводу sendfile



В Solaris sendfilev() оказался того же плана, что и sendfile() во FreeBSD.
А именно, несмотря на то, что аргумент в sendfilev() - массив из блоков памяти
и кусков файлов, эти части выводятся в отдельных эзернетовских пакетах.
Файлы могут выводиться постранично. В присланном мне примере без TCP_NODELAY
HTTP ответ в пакетах выглядит так:

290 - заголовок.
Потом 5 пакетов по 1448, один 952 - это одна 8K страница на спарке.
Затем идут ещё 5 таких же страниц (5*1448+952) и лишь после этого идут
сплошные пакеты по 1448 до самого конца файла.

Во FreeBSD ситуация похожая: до версии 5.3 заголовок идёт в отдельном
пакете. Файловые страницы выводятся постранично, например, 1452, 1452 и 1152.
Иногда вывод может быть по две или три страницы. Поэтому я стал использовать
опцию TCP_NOPUSH для того, чтобы избежать частично заполненных пакетов.


Игорь Сысоев
http://sysoev.ru




 




Copyright © Lexa Software, 1996-2009.