diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-01-21 19:44:30 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2019-02-15 17:13:58 +0100 |
commit | b412af57a31c9cba56b1fcd0ea4dd626620cb543 (patch) | |
tree | 5ea1138c0f52b3e504bb95982756c1055a03c013 /src/resolve/resolved-dns-stream.c | |
parent | f447d9e3765f33a0bae8abca0e7b673b8e429dd8 (diff) | |
download | systemd-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.c | 8 |
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 |