From: Christopher Faulet Date: Mon, 20 Feb 2023 07:36:53 +0000 (+0100) Subject: MINOR: stconn: Set half-close timeout using proxy settings X-Git-Tag: v2.8-dev5~122 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bcdcfad3ff58bab002f99c85c2c9d82ab88770a7;p=thirdparty%2Fhaproxy.git MINOR: stconn: Set half-close timeout using proxy settings We now directly use the proxy settings to set the half-close timeout of a stream-connector. The function sc_set_hcto() must be used to do so. This timeout is only set when a shutw is performed. So it is not really a big deal to use a dedicated function to do so. --- diff --git a/include/haproxy/sc_strm.h b/include/haproxy/sc_strm.h index e58499d7a0..579409271b 100644 --- a/include/haproxy/sc_strm.h +++ b/include/haproxy/sc_strm.h @@ -401,4 +401,19 @@ static inline void sc_check_timeouts(const struct stconn *sc) sc_oc(sc)->flags |= CF_WRITE_TIMEOUT; } +static inline void sc_set_hcto(struct stconn *sc) +{ + struct stream *strm = __sc_strm(sc); + + if (sc->flags & SC_FL_ISBACK) { + if ((strm->flags & SF_BE_ASSIGNED) && tick_isset(strm->be->timeout.serverfin)) + sc->ioto = strm->be->timeout.serverfin; + } + else { + if (tick_isset(strm_fe(strm)->timeout.clientfin)) + sc->ioto = strm_fe(strm)->timeout.clientfin; + } + +} + #endif /* _HAPROXY_SC_STRM_H */ diff --git a/src/stconn.c b/src/stconn.c index ae537661f0..6cf4830cea 100644 --- a/src/stconn.c +++ b/src/stconn.c @@ -568,9 +568,7 @@ static void sc_app_shutw(struct stconn *sc) if (oc->flags & CF_SHUTW) return; oc->flags |= CF_SHUTW|CF_WRITE_EVENT; - - if (tick_isset(sc->hcto)) - sc->ioto = sc->hcto; + sc_set_hcto(sc); switch (sc->state) { case SC_ST_RDY: @@ -701,9 +699,7 @@ static void sc_app_shutw_conn(struct stconn *sc) if (oc->flags & CF_SHUTW) return; oc->flags |= CF_SHUTW|CF_WRITE_EVENT; - - if (tick_isset(sc->hcto)) - sc->ioto = sc->hcto; + sc_set_hcto(sc); switch (sc->state) { case SC_ST_RDY: @@ -898,9 +894,7 @@ static void sc_app_shutw_applet(struct stconn *sc) if (oc->flags & CF_SHUTW) return; oc->flags |= CF_SHUTW|CF_WRITE_EVENT; - - if (tick_isset(sc->hcto)) - sc->ioto = sc->hcto; + sc_set_hcto(sc); /* on shutw we always wake the applet up */ appctx_wakeup(__sc_appctx(sc));