Source File
lookup.go
Belonging Package
net
package net
import (
)
var dnsWaitGroup sync.WaitGroup
const maxProtoLength = len("RSVP-E2E-IGNORE") + 10 // with room to grow
func ( string) (int, error) {
var [maxProtoLength]byte
:= copy([:], )
lowerASCIIBytes([:])
, := protocols[string([:])]
if ! || != len() {
return 0, &AddrError{Err: "unknown IP protocol specified", Addr: }
}
return , nil
}
const maxPortBufSize = len("mobility-header") + 10
func (, string) ( int, error) {
switch {
case "tcp4", "tcp6":
= "tcp"
case "udp4", "udp6":
= "udp"
}
if , := services[]; {
var [maxPortBufSize]byte
:= copy([:], )
lowerASCIIBytes([:])
if , := [string([:])]; && == len() {
return , nil
}
}
return 0, &AddrError{Err: "unknown port", Addr: + "/" + }
}
var DefaultResolver = &Resolver{}
}
func ( *Resolver) () bool { return != nil && .PreferGo }
func ( *Resolver) () bool { return != nil && .StrictErrors }
func ( *Resolver) () *singleflight.Group {
if == nil {
return &DefaultResolver.lookupGroup
}
return &.lookupGroup
}
func ( string) ( []string, error) {
return DefaultResolver.LookupHost(context.Background(), )
}
if == "" {
return nil, &DNSError{Err: errNoSuchHost.Error(), Name: , IsNotFound: true}
}
if , := parseIPZone(); != nil {
return []string{}, nil
}
return .lookupHost(, )
}
func ( string) ([]IP, error) {
, := DefaultResolver.LookupIPAddr(context.Background(), )
if != nil {
return nil,
}
:= make([]IP, len())
for , := range {
[] = .IP
}
return , nil
}
func ( *Resolver) ( context.Context, , string) ([]IP, error) {
, , := parseNetwork(, , false)
if != nil {
return nil,
}
switch {
case "ip", "ip4", "ip6":
default:
return nil, UnknownNetworkError()
}
, := .internetAddrList(, , )
if != nil {
return nil,
}
:= make([]IP, 0, len())
for , := range {
= append(, .(*IPAddr).IP)
}
return , nil
}
type onlyValuesCtx struct {
context.Context
lookupValues context.Context
}
var _ context.Context = (*onlyValuesCtx)(nil)
func ( *onlyValuesCtx) ( interface{}) interface{} {
select {
case <-.lookupValues.Done():
return nil
default:
return .lookupValues.Value()
}
}
func ( context.Context) context.Context {
return &onlyValuesCtx{Context: context.Background(), lookupValues: }
}
, := context.WithCancel(withUnexpiredValuesPreserved())
:= + "\000" +
dnsWaitGroup.Add(1)
, := .getLookupGroup().DoChan(, func() (interface{}, error) {
defer dnsWaitGroup.Done()
return testHookLookupIP(, , , )
})
if ! {
dnsWaitGroup.Done()
}
select {
if .getLookupGroup().ForgetUnshared() {
()
} else {
go func() {
<-
()
}()
}
:= mapErr(.Err())
if != nil && .DNSDone != nil {
.DNSDone(nil, false, )
}
return nil,
case := <-:
()
if != nil && .DNSDone != nil {
, := .Val.([]IPAddr)
.DNSDone(ipAddrsEface(), .Shared, .Err)
}
return lookupIPReturn(.Val, .Err, .Shared)
}
}
func (, string) ( int, error) {
return DefaultResolver.LookupPort(context.Background(), , )
}
func ( *Resolver) ( context.Context, , string) ( int, error) {
, := parsePort()
if {
switch {
case "tcp", "tcp4", "tcp6", "udp", "udp4", "udp6":
case "": // a hint wildcard for Go 1.0 undocumented behavior
= "ip"
default:
return 0, &AddrError{Err: "unknown network", Addr: }
}
, = .lookupPort(, , )
if != nil {
return 0,
}
}
if 0 > || > 65535 {
return 0, &AddrError{Err: "invalid port", Addr: }
}
return , nil
}
func ( string) ( string, error) {
return DefaultResolver.lookupCNAME(context.Background(), )
}
func (, , string) ( string, []*SRV, error) {
return DefaultResolver.lookupSRV(context.Background(), , , )
}
func ( string) ([]*MX, error) {
return DefaultResolver.lookupMX(context.Background(), )
}
func ( string) ([]*NS, error) {
return DefaultResolver.lookupNS(context.Background(), )
}
func ( string) ([]string, error) {
return DefaultResolver.lookupTXT(context.Background(), )
}
func ( string) ( []string, error) {
return DefaultResolver.lookupAddr(context.Background(), )
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |