dns

DNS client and server implementations using the Go project's dnsmessage package
Log | Files | Refs | README | LICENSE

commit 3b6333ee3bb41ffb8165a098957014d84fe3d565
parent 11f7c1c6cd3a633c23b4f79de0712ad7a21fe302
Author: Oliver Lowe <o@olowe.co>
Date:   Tue, 14 Dec 2021 12:08:38 +1100

cmd/recursor: early return on NXDOMAIN, early break on hints

Diffstat:
Mcmd/recursor/recursor.go | 17+++--------------
1 file changed, 3 insertions(+), 14 deletions(-)

diff --git a/cmd/recursor/recursor.go b/cmd/recursor/recursor.go @@ -59,25 +59,15 @@ func resolve(q dnsmessage.Question, next []net.IP) (dnsmessage.Message, error) { } fmt.Fprintf(os.Stderr, "asking %s about %s\n", ip, q.Name) rmsg, err = dns.Exchange(qmsg, ip2dial(ip)) - if rmsg.Header.RCode == dnsmessage.RCodeServerFailure { - fmt.Fprintf(os.Stderr, "resolve %s: temp srv fail from %s\n", q.Name, ip) - continue - } - if rmsg.Header.RCode == dnsmessage.RCodeRefused { - fmt.Fprintf(os.Stderr, "resolve %s: refused from %s\n", q.Name, ip) - continue - } - if err == nil { + if rmsg.Header.RCode == dnsmessage.RCodeNameError { + return rmsg, err + } else if rmsg.Header.RCode == dnsmessage.RCodeSuccess && err == nil { break } } if err != nil { return dnsmessage.Message{}, fmt.Errorf("resolve %s: %w", q.Name, err) } - - if rmsg.Header.RCode == dnsmessage.RCodeNameError { - return rmsg, nil - } if len(rmsg.Answers) > 0 { return rmsg, nil } @@ -170,7 +160,6 @@ func handler(w dns.ResponseWriter, qmsg *dnsmessage.Message) { cache.m[q] = rmsg.Answers fmt.Fprintf(os.Stderr, "added %s %s to cache\n", q.Name, q.Type) cache.Unlock() - fmt.Fprintf(os.Stderr, "finished %s %s\n", q.Name, q.Type) } var cache = struct{