BUG/MEDIUM: connections: Don't call shutdown() if we want to disable linger.
In conn_sock_shutw(), avoid calling shutdown() if linger_risk is set. Not
doing so will result in getting sockets in TIME_WAIT for some time.
This is particularly observable with health checks.
This should be backported to 1.9.
diff --git a/include/proto/connection.h b/include/proto/connection.h
index 115e7aa..1e5fc9c 100644
--- a/include/proto/connection.h
+++ b/include/proto/connection.h
@@ -352,7 +352,8 @@
/* don't perform a clean shutdown if we're going to reset or
* if the shutr was already received.
*/
- if (conn_ctrl_ready(c) && !(c->flags & CO_FL_SOCK_RD_SH) && clean)
+ if (conn_ctrl_ready(c) && !(c->flags & CO_FL_SOCK_RD_SH) && clean &&
+ !fdtab[c->handle.fd].linger_risk)
shutdown(c->handle.fd, SHUT_WR);
}