go 在Unix系统中,查找CNAME不一致性,

fzwojiic  于 2个月前  发布在  Go
关注(0)|答案(4)|浏览(23)

有一个建议是让LookupCNAME在unix和windows之间保持一致,或者更具体地说,让它发送一个明确的CNAME查询,这样当最后一个CNAME没有以A/AAAA记录结尾时,它会返回CNAME。因此,这次更改使得cgo版本使用res_search例程而不是getaddrinfo。
这导致了一些由于这次更改而发生的不兼容性破坏的变化,以及linux/windows之间的一些细微差别。
当前问题:

  1. 当cgo失败时,正在使用go解析器(即使对于noSuchHost)。这将返回completed == false,因此回退到go(lookupCNAME)。编辑:go解析器还将发送第二个(不必要的)CNAME。
    go/src/net/cgo_unix.go
    第296行至第300行
    | funccgoLookupCNAME(ctx context.Context, namestring) (cnamestring, errerror, completedbool) { |
    | resources, err:=resSearch(ctx, name, int(dnsmessage.TypeCNAME), int(dnsmessage.ClassINET)) |
    | iferr!=nil { |
    | return |
    | } |
    go/src/net/lookup_unix.go
    第102行至第110行
    | func (r*Resolver) lookupCNAME(ctx context.Context, namestring) (string, error) { |
    | order, conf:=systemConf().hostLookupOrder(r, name) |
    | iforder==hostLookupCgo { |
    | ifcname, err, ok:=cgoLookupCNAME(ctx, name); ok { |
    | returncname, err |
    | } |
    | } |
    | returnr.goLookupCNAME(ctx, name, order, conf) |
    | } |
j8ag8udp

j8ag8udp2#

https://go.dev/cl/455275提到了这个问题:net: rework the unified CNAME handling on unix

hpcdzsge

hpcdzsge4#

@rsc对此你有什么看法/想法吗?如果能解决这个问题就太好了。考虑到你已经实施了#50101的更改,我想听听你对此事的看法。

相关问题