diff options
-rw-r--r-- | plugin/forward/forward.go | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/plugin/forward/forward.go b/plugin/forward/forward.go index 96b7e4c24..4c842f49e 100644 --- a/plugin/forward/forward.go +++ b/plugin/forward/forward.go @@ -7,6 +7,7 @@ package forward import ( "crypto/tls" "errors" + "io" "time" "github.com/coredns/coredns/plugin" @@ -87,7 +88,19 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg ctx = ot.ContextWithSpan(ctx, child) } - ret, err := proxy.connect(ctx, state, f.forceTCP, true) + var ( + ret *dns.Msg + err error + ) + stop := false + for { + ret, err = proxy.connect(ctx, state, f.forceTCP, true) + if err != nil && err == io.EOF && !stop { // Remote side closed conn, can only happen with TCP. + stop = true + continue + } + break + } if child != nil { child.Finish() |