[dev] synchronous write

Igor Sysoev is at rambler-co.ru
Wed Oct 17 00:00:55 MSD 2007


On Tue, Oct 16, 2007 at 09:57:15PM +0200, Manlio Perillo wrote:

> Igor Sysoev ha scritto:
> >On Tue, Oct 16, 2007 at 09:33:00PM +0200, Manlio Perillo wrote:
> >
> >>Igor Sysoev ha scritto:
> >>>On Tue, Oct 16, 2007 at 12:32:53PM +0200, Manlio Perillo wrote:
> >>>
> >>>>The mod_wsgi implementation is almost complete.
> >>>>The only feature that I have to implement is the write callable:
> >>>>http://www.python.org/dev/peps/pep-0333/#the-write-callable
> >>>>
> >>>>
> >>>>The problem is that the WSGI spec *requires* the passed-in string to be 
> >>>>completely sent to the client when the write function returns.
> >>>>
> >>>>Is this possible with Nginx?
> >>>>It does not matter that the entire process is blocked.
> >>>>
> >>>>Fortunately not so many WSGI applications use the write callable, and 
> >>>>it is going to be removed from the next revision of WSGI.
> >>>In general socket API does not allow to say exactly whether data was
> >>>sent completely to a client. The single way is close() with SO_LINGER.
> >>>
> >>No, the problem is not really whether data was sent completely to a peer 
> >>(it is sufficient that the data is in OS buffer)
> >>
> >>My problem is how to handle NGX_AGAIN in the write callable, since I 
> >>can't return control to Nginx (and setting the event handlers).
> >>
> >>As an example (pseudo code):
> >>  while ((rc = ngx_http_output_filter(r, &out) == NGX_AGAIN) {
> >>      sleep(...)
> >>
> >>
> >>But this does not works.
> >
> >This code should be as:
> >
> >my_handler(ngx_event_t *wev)
> >{
> >    ...
> >
> >    rc = ngx_http_output_filter(...);
> >
> >    if (rc == NGX_AGAIN) {
> >        r->write_handler = my_handler;
> >        ngx_handle_write_event(wev)
> >        add_timer(wev, XXX)
> >        return;
> >    }
> >
> 
> But if control does not return to Nginx, how can my handler be called?

"return" should return control to nginx.


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list