There is also this note in the /etc/resolv.conf file:
#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
but the Go DNS client uses resolv.conf for its configuration - that may be the
source of the problem. But there is also this code in the stdlib:
// avoidDNS reports whether this is a hostname for which we should not
// use DNS. Currently this includes only .onion, per RFC 7686. See
// golang.org/issue/13705. Does not cover .local names (RFC 6762),
// see golang.org/issue/16739.
func avoidDNS(name string) bool {
if name == "" {
return true
}
if name[len(name)-1] == '.' {
name = name[:len(name)-1]
}
return stringsHasSuffixFold(name, ".onion")
}
so Go issue 16739 might help.
> On Feb 22, 2021, at 11:51 PM, robert engels <[email protected]> wrote:
>
> Still, if you follow that article I referred you to it may fix your issue -
> as the resolv.conf is auto-generated on OSX and includes hostname mappings.
>
>> On Feb 22, 2021, at 11:48 PM, robert engels <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> It looks like the Go runtime implements its own DNS client on *unix
>> platforms including OSX.
>>
>>> On Feb 22, 2021, at 11:40 PM, Peng Yu <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>> I don’t understand why ping does not have the same problem. Ping is not
>>> based on C library?
>>>
>>> On Mon, Feb 22, 2021 at 11:20 PM Ian Lance Taylor <[email protected]
>>> <mailto:[email protected]>> wrote:
>>> On Mon, Feb 22, 2021 at 9:11 PM Peng Yu <[email protected]
>>> <mailto:[email protected]>> wrote:
>>> >
>>> > I tried 1.16.
>>> >
>>> > $ go version
>>> > go version go1.16 darwin/amd64
>>> >
>>> > The problem still exists. When I change mymachine.local to
>>> > mymachine_local, the problem is gone. So somehow, this is related to
>>> > host resolution? It might try to DNS lookup the hostname, when it can
>>> > not find it via DNS then it look up in /etc/hosts?
>>>
>>> On Darwin I believe that by default we pass DNS lookups to the C
>>> library. So I think that what you are seeing is the behavior of the C
>>> library. Try setting the environment variable GODEBUG=netdns=go.
>>>
>>> Ian
>>>
>>>
>>> > On 2/22/21, Ian Lance Taylor <[email protected] <mailto:[email protected]>>
>>> > wrote:
>>> > > On Mon, Feb 22, 2021 at 12:22 PM Peng Yu <[email protected]
>>> > > <mailto:[email protected]>> wrote:
>>> > >>
>>> > >> I run the following go program using net.Dial(). Depending on whether
>>> > >> I specify a local hostname (defined in /etc/hosts) or an IP. I get
>>> > >> very different runtimes.
>>> > >>
>>> > >> But `ping mymachine.local` resolves the hostname to an IP address
>>> > >> instantaneously. So the two calls of the go program should have the
>>> > >> same runtimes.
>>> > >>
>>> > >> Can anybody reproduce the same runtime problem? Does anybody know what
>>> > >> is wrong with the implementation of net.Dial()? Thanks.
>>> > >>
>>> > >> $ ./main mymachine.local:22
>>> > >> 2021/02/22 14:14:25 before
>>> > >> 2021/02/22 14:14:30 after
>>> > >> $ ./main 192.168.1.104:22 <http://192.168.1.104:22/>
>>> > >> 2021/02/22 14:14:30 before
>>> > >> 2021/02/22 14:14:30 after
>>> > >> $ cat main.go
>>> > >> package main
>>> > >> import (
>>> > >> "net"
>>> > >> "log"
>>> > >> "os"
>>> > >> )
>>> > >>
>>> > >> func main() {
>>> > >> dialAddr := os.Args[1]
>>> > >> log.Println("before")
>>> > >> _, err := net.Dial("tcp", dialAddr)
>>> > >> log.Println("after")
>>> > >> if err != nil {
>>> > >> log.Fatalln(err)
>>> > >> }
>>> > >> }
>>> > >
>>> > > Which version of Go are you using? What operating system are you
>>> > > running
>>> > > on?
>>> > >
>>> > > It is possible that are running into https://golang.org/issue/35305
>>> > > <https://golang.org/issue/35305>,
>>> > > which is fixed in 1.16.
>>> > >
>>> > > Ian
>>> > >
>>> >
>>> >
>>> > --
>>> > Regards,
>>> > Peng
>>> --
>>> Regards,
>>> Peng
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an
>>> email to [email protected]
>>> <mailto:[email protected]>.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/CABrM6w%3D8Orgj3t4MW3%3DMs7L0vy0nFS_EeGjRZ8n%2BTvQOrHAO9g%40mail.gmail.com
>>>
>>> <https://groups.google.com/d/msgid/golang-nuts/CABrM6w%3D8Orgj3t4MW3%3DMs7L0vy0nFS_EeGjRZ8n%2BTvQOrHAO9g%40mail.gmail.com?utm_medium=email&utm_source=footer>.
>>
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/AE00E72A-F08D-4328-9391-76FA7BCD9038%40ix.netcom.com.