aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--plugin/forward/connect.go19
1 files changed, 13 insertions, 6 deletions
diff --git a/plugin/forward/connect.go b/plugin/forward/connect.go
index 55deeae1e..8fde2224b 100644
--- a/plugin/forward/connect.go
+++ b/plugin/forward/connect.go
@@ -103,14 +103,21 @@ func (p *Proxy) Connect(ctx context.Context, state request.Request, opts options
return nil, err
}
+ var ret *dns.Msg
conn.SetReadDeadline(time.Now().Add(readTimeout))
- ret, err := conn.ReadMsg()
- if err != nil {
- conn.Close() // not giving it back
- if err == io.EOF && cached {
- return nil, ErrCachedClosed
+ for {
+ ret, err = conn.ReadMsg()
+ if err != nil {
+ conn.Close() // not giving it back
+ if err == io.EOF && cached {
+ return nil, ErrCachedClosed
+ }
+ return ret, err
+ }
+ // drop out-of-order responses
+ if state.Req.Id == ret.Id {
+ break
}
- return ret, err
}
p.transport.Yield(conn)