| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 
							- package net
 
- import (
 
- 	"net"
 
- 	"sync/atomic"
 
- 	"unsafe"
 
- )
 
- // IPResolver is the interface to resolve host name to IPs.
 
- type IPResolver interface {
 
- 	LookupIP(host string) ([]net.IP, error)
 
- }
 
- type systemIPResolver int
 
- func (s systemIPResolver) LookupIP(host string) ([]net.IP, error) {
 
- 	return net.LookupIP(host)
 
- }
 
- const (
 
- 	systemIPResolverInstance = systemIPResolver(0)
 
- )
 
- // SystemIPResolver returns an IPResolver that resolves IP through underlying system.
 
- func SystemIPResolver() IPResolver {
 
- 	return systemIPResolverInstance
 
- }
 
- var (
 
- 	ipResolver unsafe.Pointer
 
- )
 
- func LookupIP(host string) ([]net.IP, error) {
 
- 	r := (*IPResolver)(atomic.LoadPointer(&ipResolver))
 
- 	return (*r).LookupIP(host)
 
- }
 
- func RegisterIPResolver(resolver IPResolver) {
 
- 	atomic.StorePointer(&ipResolver, unsafe.Pointer(&resolver))
 
- }
 
- func init() {
 
- 	RegisterIPResolver(systemIPResolverInstance)
 
- }
 
 
  |