<div dir="ltr">Hi, <div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Jul 14, 2013 at 12:40 AM, Yichun Zhang (agentzh) <span dir="ltr"><<a href="mailto:agentzh@gmail.com" target="_blank">agentzh@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<div class="im"><br>
On Sat, Jul 13, 2013 at 4:43 PM, Julien Zefi wrote:<br>
><br>
> I have been trying many workarounds without luck, the last one that i have<br>
> is that if in my timer-callback the flush returns NGX_AGAIN, invoke a new<br>
> handler that sends out an empty chain, but it continue returning NGX_AGAIN,<br>
> it never backs to NGX_OK, this is how it looks:<br>
><br>
<br>
</div>It seems that what you're doing is very wrong. You'd better take a<br>
look at how the ngx_http_writer and ngx_http_set_write_handler<br>
functions are implemented in the Nginx core instead of shooting in the<br>
darkness. Basically:<br>
<br>
1. Flush outputs by r->write_event_handler instead of in your timer<br>
handler because you should only retry sending the outputs upon a<br>
epoll/poll/select write event.<br>
<br>
2. By "sending out an empty chain", I actually mean<br>
<br>
    rc = ngx_http_output_filter(r, NULL);<br>
<br>
You can see this line in the ngx_http_writer function. You're just<br>
sending out a last_buf chain.<br>
<div class="HOEnZb"><div class="h5"><br></div></div></blockquote><div><br></div><div style>Sorry by bother you again but i still cannot figure out how some internals are not working as i expect. I have take in count your suggestions and wrote a new test case (file attached).</div>
<div style><br></div><div style>My goal in that test case is to let NginX invoke my write_event_handler once the socket is ready to write again when a NGX_AGAIN is found, despite the test case is not perfect for all things that need to be fixed, i have isolated as much as i can.</div>
<div style><br></div><div style>The test case writes 12.3KB of data every 1ms, at some point it will raise NGX_AGAIN but from there is not recovering, it keeps in the same state forever, do you see any specific problem when handling the exception ?<br>
<br>thnks<br></div><div> </div></div></div></div>