plugin/forward: check message Id when reading from upstream server (#2637)

This commit is contained in:
Ruslan Drozhdzh
2019-03-01 17:40:52 +03:00
committed by Miek Gieben
parent 352a042362
commit e3e3249016

View File

@@ -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)