diff options
Diffstat (limited to '')
-rw-r--r-- | plugin/forward/connect.go | 19 |
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) |