dean gaudet wrote:

On Mon, 2 Jul 2001, Brian Pane wrote:

On Mon, 2 Jul 2001, Brian Pane wrote:

then it should be possible to eliminate a system call by not doing the
initial read before the select.

Here's a patch that disables the read before the select, but only for
the HTTP client socket.


hey brian, i think i prefer the approach below instead. but i haven't been able to test this patch because my top-of-tree httpd-2.0 won't build with top-of-tree apr/apr-util.

the approach i'm using doesn't require any changes to any applications --
it just implements the heuristic i mentioned earlier.  whenever a read()
returns an incomplete buffer assume we want to select() first before
read()ing again (and all of this only if the socket is non-blocking).


If I'm reading the code right, there's one problem with this approach: the
APR_INCOMPLETE_READ flag doesn't get set until after the first
read on a socket, so the first read on a new connection (the one that usually
returns EAGAIN) doesn't get skipped like it should. I _think_ the solution
is to set APR_INCOMPLETE_READ on any newly created socket, unless
you can think of cases where that would break something else.


--Brian




Reply via email to