From fabcaa8df3d6eb852b87821ef090d31d222870b7 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 21 Nov 2012 07:03:38 +0000 Subject: libgo: Update to current version of master library. From-SVN: r193688 --- libgo/go/net/lookup.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'libgo/go/net/lookup.go') diff --git a/libgo/go/net/lookup.go b/libgo/go/net/lookup.go index 3a44e52..bec93ec 100644 --- a/libgo/go/net/lookup.go +++ b/libgo/go/net/lookup.go @@ -4,12 +4,53 @@ package net +import ( + "time" +) + // LookupHost looks up the given host using the local resolver. // It returns an array of that host's addresses. func LookupHost(host string) (addrs []string, err error) { return lookupHost(host) } +func lookupHostDeadline(host string, deadline time.Time) (addrs []string, err error) { + if deadline.IsZero() { + return lookupHost(host) + } + + // TODO(bradfitz): consider pushing the deadline down into the + // name resolution functions. But that involves fixing it for + // the native Go resolver, cgo, Windows, etc. + // + // In the meantime, just use a goroutine. Most users affected + // by http://golang.org/issue/2631 are due to TCP connections + // to unresponsive hosts, not DNS. + timeout := deadline.Sub(time.Now()) + if timeout <= 0 { + err = errTimeout + return + } + t := time.NewTimer(timeout) + defer t.Stop() + type res struct { + addrs []string + err error + } + resc := make(chan res, 1) + go func() { + a, err := lookupHost(host) + resc <- res{a, err} + }() + select { + case <-t.C: + err = errTimeout + case r := <-resc: + addrs, err = r.addrs, r.err + } + return +} + // LookupIP looks up host using the local resolver. // It returns an array of that host's IPv4 and IPv6 addresses. func LookupIP(host string) (addrs []IP, err error) { @@ -47,6 +88,11 @@ func LookupMX(name string) (mx []*MX, err error) { return lookupMX(name) } +// LookupNS returns the DNS NS records for the given domain name. +func LookupNS(name string) (ns []*NS, err error) { + return lookupNS(name) +} + // LookupTXT returns the DNS TXT records for the given domain name. func LookupTXT(name string) (txt []string, err error) { return lookupTXT(name) -- cgit v1.1