Skip to content

fix(client): bound direct resolver connections by Timeout - #330

Merged
Mzack9999 merged 1 commit into
mainfrom
dwisiswant0/fix/client/bound-direct-resolver-connections-by-timeout
Oct 25, 2026
Merged

Mzack9999 merged 1 commit into
mainfrom
dwisiswant0/fix/client/bound-direct-resolver-connections-by-timeout

Conversation

@dwisiswant0

Copy link
Copy Markdown
Member

Without a proxy, Timeout didn't bound connecting to a resolver. A DoT
resolver that accepted the TCP connection but never answered the TLS
handshake blocked a query forever, and a TCP connect waited as long
as the operating system allowed.

dns.Client applies its Timeout to a dial only when it builds the
net.Dialer itself. Since 31b6504 every client carries a Dialer of
ours that sets only LocalAddr, so the dial lost its timeout. When
c9f6172 (#306) bounded proxied connections, it did so inside
dialProxy, and the direct branch of dial never got the same
treatment.

Apply Timeout in dial, which every TCP, DoT and unpooled UDP
connection goes through, and dial directly with DialContext, so both
branches share one deadline covering the connect and the TLS and proxy
handshakes. A zero Timeout still leaves connecting unbounded.

Fixes: #311

Without a proxy, Timeout didn't bound connecting to a resolver. A DoT
resolver that accepted the TCP connection but never answered the TLS
handshake blocked a query forever, and a TCP connect waited as long
as the operating system allowed.

dns.Client applies its Timeout to a dial only when it builds the
net.Dialer itself. Since 31b6504 every client carries a Dialer of
ours that sets only LocalAddr, so the dial lost its timeout. When
c9f6172 (#306) bounded proxied connections, it did so inside
dialProxy, and the direct branch of dial never got the same
treatment.

Apply Timeout in dial, which every TCP, DoT and unpooled UDP
connection goes through, and dial directly with DialContext, so both
branches share one deadline covering the connect and the TLS and proxy
handshakes. A zero Timeout still leaves connecting unbounded.

Fixes: #311
Signed-off-by: Dwi Siswanto <git@dw1.io>
@dwisiswant0
dwisiswant0 requested a review from Mzack9999 October 24, 2026 18:53
@Mzack9999
Mzack9999 merged commit 74874ba into main Oct 25, 2026
5 checks passed
@Mzack9999
Mzack9999 deleted the dwisiswant0/fix/client/bound-direct-resolver-connections-by-timeout branch October 25, 2026 10:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Timeout doesn't bound connecting to a resolver

2 participants