* Plüm, Rüdiger, VIS <[EMAIL PROTECTED]> [2006-02-06 09:29]:
> 
> 
> > -----Ursprüngliche Nachricht-----
> > Von: Alan Gutierrez 
> > 
> > The proposed solution is to poll for chunks using 
> > non-blocking I/O. When the socket returns EAGAIN, the 8K 
> > buffer is flushed, and the socket is read with blocking I/O.
> 
> Thats the way the code is already designed in 2.2.x.

I am aware of this, acutally. I should have noted this myself.

I've traced through the code to see where the EAGAIN return value is
lost, and to note that the non-blocking mode is not applied to the
header. I've not tested, but I suspect that the logic is correctly
implemented should the socket block during the transfer of the body
of a chunk. It fails when the next chunk has not been sent.


> > However, in the http code, regardless of the block mode flag, 
> > the headers are read using blocking I/O. Furthermore, 
> > somewhere deeper in the chain, when EAGAIN is detected the 
> > success flag is returned instead. I'll provide more detail, 
> > if this is not already well known.

> This is the problem. The EAGAIN or better the mode handling in this
> code path is somewhat broken.

Looks that way. The EAGAIN is never sent back out, and in addition
the headers are read with a blocking read. It would require changing
the return values of code path, which may way cause some breakage.

Maybe not, if EAGAIN is handled correctly in all places, but it's
never been tested, since it's never returned, right?

> > Looks like this is going to be messy to fix. Any patches?
> 
> Not so far. I guess it requires some general changes that must
> be carefully designed. But anyway, patch proposals are welcome :-).

Can I suggest a flag? Something like

ProxyChunkedAsIs On

If this could be specified for a path or directory, then the
upstream chunks are sent immediately, no buffering what so ever.

This is a patch I've applied partially, need to add the flag. Adding
the behavior fixes my problem.

I'm proxying a stock ticker. The chunk size is always going to be
smaller than 8k. Even when the EAGAIN logic is implemented
correctly, buffering is liable to delay the receipt of the chunk.

> Actually, the thing you want works with mod_proxy_ajp in 2.2.x.

AJP? Confusing. Wish I could keep it HTTP.

--
Alan Gutierrez - 504 717 1428 - [EMAIL PROTECTED] - http://blogometer.com/

Reply via email to