From: Willy Tarreau Date: Fri, 26 Oct 2012 23:36:34 +0000 (+0200) Subject: BUG: compression: disable auto-close and enable MSG_MORE during transfer X-Git-Tag: v1.5-dev13~92 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=08b4d79d314f3dcc052cc650c83f8dbc00f04b8a;p=thirdparty%2Fhaproxy.git BUG: compression: disable auto-close and enable MSG_MORE during transfer We don't want the lower layer to forward a close while we're compressing, and we want the system to fuse outgoing TCP segments using MSG_MORE as much as possible to save round trips that can emerge from sending short packets with a PUSH flag. A test on a remote busy DSL line consisting in compressing a 100MB file on the fly full of zeroes only showed a transfer rate of a few kB/s due to these round trips. --- diff --git a/src/proto_http.c b/src/proto_http.c index 6167f1f175..e8046a5058 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -5729,7 +5729,7 @@ int http_response_forward_body(struct session *s, struct channel *res, int an_bi * Similarly, with keep-alive on the client side, we don't want to forward a * close. */ - if ((msg->flags & HTTP_MSGF_TE_CHNK) || + if ((msg->flags & HTTP_MSGF_TE_CHNK) || s->comp_algo || (txn->flags & TX_CON_WANT_MSK) == TX_CON_WANT_KAL || (txn->flags & TX_CON_WANT_MSK) == TX_CON_WANT_SCL) channel_dont_close(res); @@ -5742,7 +5742,7 @@ int http_response_forward_body(struct session *s, struct channel *res, int an_bi * flag with the last block of forwarded data, which would cause an * additional delay to be observed by the receiver. */ - if (msg->flags & HTTP_MSGF_TE_CHNK) + if ((msg->flags & HTTP_MSGF_TE_CHNK) || s->comp_algo) res->flags |= CF_EXPECT_MORE; /* the session handler will take care of timeouts and errors */