From 8615c2af67dc2be07bdb246ed13130fe7d32e3d1 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 21 Jun 2013 08:20:19 +0200 Subject: [PATCH] MEDIUM: session: disable lingering on the server when the client aborts When abortonclose is used and an error is detected on the client side, better force an RST to the server. That way we propagate to the server the same vision we got from the client, and we ensure that we won't keep TIME_WAITs. --- src/session.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/session.c b/src/session.c index d967b2bbf..004f293c0 100644 --- a/src/session.c +++ b/src/session.c @@ -2139,8 +2139,11 @@ struct task *process_session(struct task *t) /* shutdown(write) pending */ if (unlikely((s->req->flags & (CF_SHUTW|CF_SHUTW_NOW)) == CF_SHUTW_NOW && - channel_is_empty(s->req))) + channel_is_empty(s->req))) { + if (s->req->flags & CF_READ_ERROR) + s->req->cons->flags |= SI_FL_NOLINGER; si_shutw(s->req->cons); + } /* shutdown(write) done on server side, we must stop the client too */ if (unlikely((s->req->flags & (CF_SHUTW|CF_SHUTR|CF_SHUTR_NOW)) == CF_SHUTW &&