Зачем Go запрашивает / etc / hosts дважды в разрешении имен? - PullRequest
0 голосов
/ 02 декабря 2018

Недавно я читаю исходный код net пакета Go.Когда я углублялся в часть разрешения имен, казалось, что Go дважды запрашивал /etc/hosts:

Сначала в net/dnsclient_unix.go goLookupHostOrder :

func (r *Resolver) goLookupHostOrder(ctx context.Context, name string, order hostLookupOrder) (addrs []string, err error) {
    if order == hostLookupFilesDNS || order == hostLookupFiles {
        // Use entries from /etc/hosts if they match.
        addrs = lookupStaticHost(name)
        if len(addrs) > 0 || order == hostLookupFiles {
            return
        }   
    }   
    ips, _, err := r.goLookupIPCNAMEOrder(ctx, name, order)

Затемв goLookupIPCNAMEOrder :

func (r *Resolver) goLookupIPCNAMEOrder(ctx context.Context, name string, order hostLookupOrder) (addrs []IPAddr, cname dnsmessage.Name, err error) {
    if order == hostLookupFilesDNS || order == hostLookupFiles {
        // goLookupIPFiles invokes lookupStaticHost internally.
        addrs = goLookupIPFiles(name)
        if len(addrs) > 0 || order == hostLookupFiles {
            return addrs, dnsmessage.Name{}, nil
        } 
    } 

Так это ошибка?Или у него есть какая-то причина, но не задокументированная?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...