Начиная с того момента, как управление перешло в мой модуль, мне надо выполнять цикл вида
while (не отослали все) {
i = file_from_disk.read(buf, buf_size) (1)
write_to_response(buf, i) (2)
}
Строка (1) блокирует выполнение потока, поскольку диск не обязан быть готов к чтению. Этих чтений много (целый цикл). Следоваельно, поток заблокируется надолго. Как реализовать строку (2) (а следовательно и весь цикл) - я не знаю. Все примеры по написанию модулей, что я видел, - тривиальны: выделяется буффер b, цепочка для вывода out
b->pos = some_bytes; /* first position in memory of the data */
b->last = some_bytes + some_bytes_length; /* last position */
b->last_buf = 1; /* Это ведь просто пример. Ограничимся тривиальным сценарием */
out.buf = b;
out.next = NULL; /* Это ведь просто пример. Ограничимся тривиальным сценарием */
и все это хозяйство отдается дальше
return ngx_http_output_filter(r, &out);
Как из этого тривиального примера получить реальный - непонятно.
Может я туплю - тогда уж сильно не пинайте :)