Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Cache ¶
type Cache struct {
// contains filtered or unexported fields
}
Cache type.
type Delegation ¶
type Delegation struct {
Servers *Servers
DSSet []dns.RR
TTL time.Duration
// contains filtered or unexported fields
}
Delegation represents a cache entry holding the authoritative servers for a zone plus the DS RRset that proves the delegation.
type Server ¶
type Server struct {
// place atomic members at the start to fix alignment for ARM32
Rtt int64
Count int64
Addr string
IPVersion IPVersion
// UDPAddr is Addr pre-parsed as *net.UDPAddr so the upstream
// exchange path can use net.DialUDP directly instead of going
// through Dialer.DialContext's string-parsing + dialParallel
// machinery. Nil only if Addr failed to parse — callers fall
// back to the string path in that case.
UDPAddr *net.UDPAddr
}
Server type.
type Servers ¶
type Servers struct {
sync.RWMutex
// place atomic members at the start to fix alignment for ARM32
Called uint64
ErrorCount uint32
Zone string
List []*Server
Hosts []string
CheckingDisable bool
Checked bool
// contains filtered or unexported fields
}
Servers type.
func (*Servers) Fingerprint ¶
Fingerprint returns a stable identifier for the current List.Addr set. Callers must not hold the Servers lock.
func (*Servers) InvalidateFingerprint ¶
func (a *Servers) InvalidateFingerprint()
InvalidateFingerprint must be called whenever List is mutated. It has to run *before* the mutator releases the Servers write lock so readers can't observe the mutated List with a still-valid cached hash. A single atomic increment is cheap enough to keep inside the critical section.
Click to show internal directories.
Click to hide internal directories.