handle NGX_AGAIN properly
Yichun Zhang (agentzh)
agentzh at gmail.com
Sun Jul 14 06:40:15 UTC 2013
Hello!
On Sat, Jul 13, 2013 at 4:43 PM, Julien Zefi wrote:
>
> I have been trying many workarounds without luck, the last one that i have
> is that if in my timer-callback the flush returns NGX_AGAIN, invoke a new
> handler that sends out an empty chain, but it continue returning NGX_AGAIN,
> it never backs to NGX_OK, this is how it looks:
>
It seems that what you're doing is very wrong. You'd better take a
look at how the ngx_http_writer and ngx_http_set_write_handler
functions are implemented in the Nginx core instead of shooting in the
darkness. Basically:
1. Flush outputs by r->write_event_handler instead of in your timer
handler because you should only retry sending the outputs upon a
epoll/poll/select write event.
2. By "sending out an empty chain", I actually mean
rc = ngx_http_output_filter(r, NULL);
You can see this line in the ngx_http_writer function. You're just
sending out a last_buf chain.
Regards,
-agentzh
More information about the nginx-devel
mailing list