]> git.ipfire.org Git - thirdparty/squid.git/commit
Recover after failing to open a TCP connection to DNS server (#1861)
authorAlex Rousskov <rousskov@measurement-factory.com>
Wed, 10 Jul 2024 10:30:33 +0000 (10:30 +0000)
committerAmos Jeffries <yadij@users.noreply.github.com>
Thu, 18 Jul 2024 18:34:46 +0000 (06:34 +1200)
commita4cd6fc79213cca36abfc7025622bff3bd8344b0
tree9f11f0eb6d26a2628e74ea0066e4929422e3b4b3
parent7304a2e31f08ec4d18f31898a1fcc497080a949c
Recover after failing to open a TCP connection to DNS server (#1861)

    ERROR: Failed to connect to nameserver 127.0.0.1 using TCP.

After failing to establish a TCP connection to a DNS server, all DNS
queries that needed a TCP connection to that DNS server would timeout
because the nsvc object representing TCP connectivity got stuck in a
"queuing new queries but too busy to send any right now" state. Such
timeouts typically lead to HTTP 503 ERR_DNS_FAIL responses. This bug was
introduced when Comm closure handler registration was moved/delayed in
2010 commit cfd66529.

With this change, the affected nsvc object is destroyed, and Squid
attempts to open another TCP connection to the DNS server (when needed).
The original query is typically retried (subject to dns_timeout and
dns_retransmit_interval idiosyncrasies).

XXX: This fix increases the surface of reconfiguration and shutdown
problems documented in nsvc class destructor XXX.
src/dns_internal.cc