фильтр
Maxim Dounin
mdounin at mdounin.ru
Sun Mar 30 06:30:18 MSD 2008
Hello!
On Sun, Mar 30, 2008 at 05:44:53AM +0400, Maxim Dounin wrote:
> Hello!
>
> On Sun, Mar 30, 2008 at 03:03:29AM +0200, Alexander Dolgarev wrote:
>
>> В чем принципиальная неправильность следующего фрагмента кода (если
>> допустить что in != NULL и in->next == NULL)? Клиент просто ждет и
>> ничего не получает в ответ.
>>
>>
>> static ngx_int_t
>> ngx_http_*_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
>> {
>> ngx_chain_t *out;
>> ngx_buf_t *b;
>>
>> out = ngx_pcalloc(r->pool, sizeof(ngx_chain_t));
>> b = ngx_create_temp_buf(r->pool, in->buf->last - in->buf->pos);
>> memcpy (b->pos, in->buf->pos, in->buf->last - in->buf->pos);
>> b->last_buf = in->buf->last_buf;
>> out->buf = b;
>>
>> return ngx_http_next_body_filter(r, out);
>> }
>
> Старый буфер помечен как отправленный, соответственно если ответ будет
s/помечен/не помечен/
Maxim Dounin
> более чем output_buffers - его не отошлют. Как минимум надо ещё сделать:
>
> in->buf->pos = in->buf->last;
>
> Плюс к тому - никто не обещал, что буфер будет в памяти. Чтобы он таки там
> был - об этом надо специально попросить, поставив в
> ngx_http_*_header_filter()
>
> r->filter_need_in_memory = 1;
>
> Maxim Dounin
>
More information about the nginx-ru
mailing list