В 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