Documentation
¶
Overview ¶
Package client implements DNS client wrappers
Index ¶
Constants ¶
const ( // DefaultSingleFlightExpiration tells how long will we cache // the result after an exchange DefaultSingleFlightExpiration = 1 * time.Second )
Variables ¶
This section is empty.
Functions ¶
func HasIPv6Support ¶ added in v0.7.8
func HasIPv6Support() bool
HasIPv6Support tells if the system supports IPv6 or not. This doesn't guarantee connections will be successful.
func NewDefaultClient ¶
NewDefaultClient allocate a default dns.Client in the same manner as dns.ExchangeContext(), plain UDP.
Types ¶
type Auto ¶ added in v0.7.7
Auto is a client that allows different networks based on the server's prefix. * udp:// for UDP-only * tcp:// for TCP-only * tls:// for TCP+TLS * and without prefix for TCP-fallback
func NewAutoClient ¶ added in v0.7.7
NewAutoClient allocates a new Auto client. If changes to fields are done manually after this call, or manually assembling the Auto struct, it is required to call Auto.SetDefaults.
NewAutoClient allows specifying a custom expiration value for SingleFlight, but when Auto is assembled manually or `exp == 0`, DefaultSingleFlightExpiration will be used.
func (*Auto) ExchangeContext ¶ added in v0.7.7
func (c *Auto) ExchangeContext(ctx context.Context, req *dns.Msg, server string) (*dns.Msg, time.Duration, error)
ExchangeContext uses different exchange networks based on the prefix of the server string.
func (*Auto) SetDefaults ¶ added in v0.7.7
SetDefaults fills the configuration gaps
type Client ¶
type Client interface {
ExchangeContext(context.Context, *dns.Msg, string) (*dns.Msg, time.Duration, error)
}
A Client makes a request to a server
type ExchangeFunc ¶ added in v0.7.6
ExchangeFunc is a function that implements the Client interface
type NoAAAA ¶ added in v0.7.10
type NoAAAA struct {
Client
}
NoAAAA is a dns.Client middleware to remove AAAA entries from all responses
func NewNoAAAA ¶ added in v0.7.10
NewNoAAAA creates a Client middleware that filters out all AAAA entries
type SingleFlight ¶
type SingleFlight struct {
// contains filtered or unexported fields
}
SingleFlight wraps a Client to minimize redundant queries
func NewSingleFlight ¶
func NewSingleFlight(c Client, exp time.Duration) *SingleFlight
NewSingleFlight creates a SingleFlight Client around another. if no Client is specified, the default udp dns.Client will be used. if exp is positive, the result will be cached that long. if exp is negative, the result will expire immediately if exp is zero, DefaultSingleFlightExpiration will be used
func (*SingleFlight) ExchangeContext ¶
func (sfc *SingleFlight) ExchangeContext(ctx context.Context, req *dns.Msg, server string) (*dns.Msg, time.Duration, error)
ExchangeContext makes a DNS query to a server, minimizing duplications.
func (*SingleFlight) RequestKey ¶
func (*SingleFlight) RequestKey(req *dns.Msg, server string) string
RequestKey serializes a DNS request to act as temporary cache key
func (*SingleFlight) Unwrap ¶ added in v0.7.6
func (sfc *SingleFlight) Unwrap() *dns.Client
Unwrap returns the underlying *dns.Client
type Unwrapper ¶ added in v0.7.6
An Unwrapper can tell what's the underlying *dns.Client