From: Willy Tarreau Date: Mon, 7 Jan 2013 15:38:26 +0000 (+0100) Subject: OPTIM: splice: detect shutdowns and avoid splice() == 0 X-Git-Tag: v1.5-dev18~129 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=baf2a500a185fcaedede4510281be5d16a8dddde;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/raw_sock.c b/src/raw_sock.c index 20a867add0..952891133d 100644 --- a/src/raw_sock.c +++ b/src/raw_sock.c @@ -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.