|
|
@@ -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)
|
|
|
-}
|