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
