On 27/02/2023 11.38, Blažej Krajňák wrote:
What about implementing different tcp_in_idle parameter for empty and non-empty sessions?

I can't see why.  Why should non-empty sessions be preferred?  The change would just motivate clients to send requests that they don't even need, creating more work.  If a client is anticipating the need to resolve requests very soon, I see sense in doing handshake beforehand to reduce latency later.


What about implementing server-side TCP keepalive messages?

I haven't looked very deep, but I'm not convinced so far.

For the considered idle lengths before closure (a couple minutes), it seems like TCP keepalive wouldn't commonly help to keep connections alive - in the sense that they would most likely remain alive anyway even without exchanging anything during a period of that length (unless either side decides to close).  It might cause slightly faster disconnection of dead clients, but I don't expect significant impact there either if tcp_in_idle remains on values like 120s or lower.


What about returning "Connection: keep-alive" header as Cloudflare
does? (I don't know for what, just to be sure :) )

I don't think so.  It looks only useful for http 1.0 and prohibited for http 2 or 3.  Knot Resolver supports 2 only, currently (if we disregard the legacy lua-based DoH).  https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Keep-Alive