From 509da1ca6b090fc05567ce8b19e9a53bda1077d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Tue, 31 Mar 2026 17:08:52 +0800 Subject: [PATCH] dns: return immediately on context cancellation in evaluate exchange --- dns/router.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dns/router.go b/dns/router.go index e8f1e0f42..96897c036 100644 --- a/dns/router.go +++ b/dns/router.go @@ -501,6 +501,9 @@ func (r *Router) exchangeWithRules(ctx context.Context, rules []adapter.DNSRule, } response, err := r.client.Exchange(adapter.OverrideContext(ctx), transport, message, exchangeOptions, nil) if err != nil { + if E.IsClosedOrCanceled(err) { + return exchangeWithRulesResult{err: err} + } r.logger.ErrorContext(ctx, E.Cause(err, "exchange failed for ", FormatQuestion(message.Question[0].String()))) savedResponse = nil continue