summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-dns-stream.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-01-21 19:44:30 +0100
committerLennart Poettering <lennart@poettering.net>2019-02-15 17:13:58 +0100
commitb412af57a31c9cba56b1fcd0ea4dd626620cb543 (patch)
tree5ea1138c0f52b3e504bb95982756c1055a03c013 /src/resolve/resolved-dns-stream.c
parentf447d9e3765f33a0bae8abca0e7b673b8e429dd8 (diff)
downloadsystemd-b412af57a31c9cba56b1fcd0ea4dd626620cb543.tar.gz
resolved: keep stub stream connections up for as long as client wants
This enables pipelining of queries from clients to our stub server. Fixes: #11332
Diffstat (limited to 'src/resolve/resolved-dns-stream.c')
-rw-r--r--src/resolve/resolved-dns-stream.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c
index 3fd056bdb7..cb7b186fc9 100644
--- a/src/resolve/resolved-dns-stream.c
+++ b/src/resolve/resolved-dns-stream.c
@@ -11,6 +11,8 @@
#define DNS_STREAM_TIMEOUT_USEC (10 * USEC_PER_SEC)
#define DNS_STREAMS_MAX 128
+#define DNS_QUERIES_PER_STREAM 32
+
static void dns_stream_stop(DnsStream *s) {
assert(s);
@@ -36,7 +38,11 @@ static int dns_stream_update_io(DnsStream *s) {
s->n_written = 0;
f |= EPOLLOUT;
}
- if (!s->read_packet || s->n_read < sizeof(s->read_size) + s->read_packet->size)
+
+ /* Let's read a packet if we haven't queued any yet. Except if we already hit a limit of parallel
+ * queries for this connection. */
+ if ((!s->read_packet || s->n_read < sizeof(s->read_size) + s->read_packet->size) &&
+ set_size(s->queries) < DNS_QUERIES_PER_STREAM)
f |= EPOLLIN;
#if ENABLE_DNS_OVER_TLS