Fix: #563 and fallback error return
This commit is contained in:
parent
88d8f93793
commit
c733f80793
1 changed files with 3 additions and 3 deletions
|
@ -118,8 +118,7 @@ func (r *Resolver) Exchange(m *D.Msg) (msg *D.Msg, err error) {
|
||||||
ret, err, _ := r.group.Do(q.String(), func() (interface{}, error) {
|
ret, err, _ := r.group.Do(q.String(), func() (interface{}, error) {
|
||||||
isIPReq := isIPRequest(q)
|
isIPReq := isIPRequest(q)
|
||||||
if isIPReq {
|
if isIPReq {
|
||||||
msg, err := r.fallbackExchange(m)
|
return r.fallbackExchange(m)
|
||||||
return msg, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.batchExchange(r.main, m)
|
return r.batchExchange(r.main, m)
|
||||||
|
@ -171,7 +170,7 @@ func (r *Resolver) batchExchange(clients []dnsClient, m *D.Msg) (msg *D.Msg, err
|
||||||
m, err := r.ExchangeContext(ctx, m)
|
m, err := r.ExchangeContext(ctx, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if m.Rcode == D.RcodeServerFailure {
|
} else if m.Rcode == D.RcodeServerFailure || m.Rcode == D.RcodeRefused {
|
||||||
return nil, errors.New("server failure")
|
return nil, errors.New("server failure")
|
||||||
}
|
}
|
||||||
return m, nil
|
return m, nil
|
||||||
|
@ -201,6 +200,7 @@ func (r *Resolver) fallbackExchange(m *D.Msg) (msg *D.Msg, err error) {
|
||||||
if r.shouldFallback(ips[0]) {
|
if r.shouldFallback(ips[0]) {
|
||||||
go func() { <-fallbackMsg }()
|
go func() { <-fallbackMsg }()
|
||||||
msg = res.Msg
|
msg = res.Msg
|
||||||
|
err = res.Error
|
||||||
return msg, err
|
return msg, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue