[dev] synchronous write

Manlio Perillo manlio_perillo at libero.it
Mon Oct 22 15:11:21 MSD 2007


Igor Sysoev ha scritto:
> [...]
>>> No, this completely kill the idea of nginx - a worker will be blocked.
>>>
>> Unfortunately this is required by the WSGI spec, and some "legacy" WSGI 
>> applications will block the worker, anyway.
>>
>> I have implemented an alternative version that uses a buffer, but I 
>> would like to know if using this "hack" is "safe", that is if Nginx will 
>> send the correct data to the client and if after setting again the 
>> socket to nonblocking mode, Nginx will work as usual.
> 
> Yes, it will work. However, you should use the following cycle:
> 
>     ngx_blocking(self->r->connection->fd);
> 
>     do {
>         rc = ngx_http_output_filter(self->r, &out);
>     } while (rc == NGX_AGAIN);
> 
>     ngx_nonblocking(self->r->connection->fd);
> 

That's unexpected, I have assumed that with socket in blocking mode 
ngx_http_output_filter never returns NGX_AGAIN.


Thanks   Manlio Perillo





More information about the nginx mailing list