|  | @@ -1,44 +0,0 @@
 | 
	
		
			
				|  |  | -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)
 | 
	
		
			
				|  |  | -}
 |