diff --git a/include/haproxy/connection-t.h b/include/haproxy/connection-t.h index 7cac07a69..857963264 100644 --- a/include/haproxy/connection-t.h +++ b/include/haproxy/connection-t.h @@ -273,6 +273,7 @@ enum { CO_RFL_BUF_WET = 0x0001, /* Buffer still has some output data present */ CO_RFL_BUF_FLUSH = 0x0002, /* Flush mux's buffers but don't read more data */ CO_RFL_READ_ONCE = 0x0004, /* don't loop even if the request/response is small */ + CO_RFL_KEEP_RECV = 0x0008, /* Instruct the mux to still wait for read events */ }; /* flags that can be passed to xprt->snd_buf() and mux->snd_buf() */ diff --git a/src/stream_interface.c b/src/stream_interface.c index 0f01d0b67..43f1a8863 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -1321,6 +1321,7 @@ int si_cs_recv(struct conn_stream *cs) * CS_FL_RCV_MORE on the CS if more space is needed. */ max = channel_recv_max(ic); + flags |= ((!conn_is_back(conn) && (si_strm(si)->be->options & PR_O_ABRT_CLOSE)) ? CO_RFL_KEEP_RECV : 0); ret = cs->conn->mux->rcv_buf(cs, &ic->buf, max, flags | (co_data(ic) ? CO_RFL_BUF_WET : 0)); if (cs->flags & CS_FL_WANT_ROOM)