Nice work. 

> On Feb 23, 2021, at 10:16 AM, Shulhan <m.shul...@gmail.com> wrote:
> 
> 
>> On 23 Feb 2021, at 12.40, Peng Yu <pengyu...@gmail.com> wrote:
>> 
>> I don’t understand why ping does not have the same problem. Ping is not 
>> based on C library?
>> 
> 
> Looking at the source code, the ping command on macOS use gethostbyname2() 
> [1][2], while the Go on macOS use C library through getaddrinfo [3][4].
> 
> According to this comment [5] on bugs.python.org, the getaddrinfo call mdns 
> library, which means it may prioritise to broadcast through network first 
> (due to local TLD rule) before consulting the /etc/hosts file.
> 
> That is my guess. Maybe someone who know macOS (or BSD in general) can 
> confirm this behaviour.
> 
> --
> 
> [1] 
> https://opensource.apple.com/source/network_cmds/network_cmds-606.40.2/ping.tproj/ping.c.auto.html
> 
> [2] 
> https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/gethostbyname.3.html
> 
> [3] https://go.googlesource.com/go/+/go1.16/src/net/cgo_unix.go#161
> 
> [4] 
> https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/getaddrinfo.3.html#//apple_ref/doc/man/3/getaddrinfo
> 
> [5] https://bugs.python.org/msg258163
> 
>> On Mon, Feb 22, 2021 at 11:20 PM Ian Lance Taylor <i...@golang.org> wrote:
>>> On Mon, Feb 22, 2021 at 9:11 PM Peng Yu <pengyu...@gmail.com> 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 <i...@golang.org> wrote:
>>>> On Mon, Feb 22, 2021 at 12:22 PM Peng Yu <pengyu...@gmail.com> 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
>>>>> 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,
>>>> 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 golang-nuts+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/CABrM6w%3D8Orgj3t4MW3%3DMs7L0vy0nFS_EeGjRZ8n%2BTvQOrHAO9g%40mail.gmail.com.
> 
> -- 
> 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 golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/A0FD8A6A-8159-46C0-AD66-575E2C040AA5%40gmail.com.

-- 
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 golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/578BFBEF-4888-4868-8B6C-96172AED7FFC%40ix.netcom.com.

Reply via email to