OPTIM: splice: detect shutdowns and avoid splice() == 0

Since last commit introducing EPOLLRDHUP, the splicing code is able to
detect an incoming shutdown without calling splice() == 0. This avoids
one useless syscall.
This commit is contained in:
Willy Tarreau 2013-01-07 16:38:26 +01:00
parent 1c07b0755d
commit baf2a500a1

View File

@ -148,6 +148,10 @@ int raw_sock_to_pipe(struct connection *conn, struct pipe *pipe, unsigned int co
retval += ret;
pipe->data += ret;
/* if a POLL_HUP was present, we've read the last segment */
if ((fdtab[conn->t.sock.fd].ev & (FD_POLL_ERR|FD_POLL_HUP)) == FD_POLL_HUP)
goto out_read0;
if (pipe->data >= SPLICE_FULL_HINT || ret >= global.tune.recv_enough) {
/* We've read enough of it for this time, let's stop before
* being asked to poll.