From 716bec2dc6f9784200c9c785bd0880d33bf75e8d Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 20 Feb 2020 11:04:40 +0100 Subject: [PATCH] MINOR: connection: introduce a new receive flag: CO_RFL_READ_ONCE This flag is currently supported by raw_sock to perform a single recv() attempt and avoid subscribing. Typically on the request and response paths with keep-alive, with short messages we know that it's very likely that the first message is enough. --- include/types/connection.h | 1 + src/raw_sock.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/include/types/connection.h b/include/types/connection.h index 52c7c7e3c..bfd6547ee 100644 --- a/include/types/connection.h +++ b/include/types/connection.h @@ -284,6 +284,7 @@ enum { 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 */ }; /* flags that can be passed to xprt->snd_buf() and mux->snd_buf() */ diff --git a/src/raw_sock.c b/src/raw_sock.c index 06d5f4d9e..ab03a8fd6 100644 --- a/src/raw_sock.c +++ b/src/raw_sock.c @@ -292,6 +292,9 @@ static size_t raw_sock_to_buf(struct connection *conn, void *xprt_ctx, struct bu } } count -= ret; + + if (flags & CO_RFL_READ_ONCE) + break; } else if (ret == 0) { goto read0;