github.com/sandwich-go/boost@v1.3.29/httputil/dns/dns.go (about)

     1  package dns
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"net"
     7  	"time"
     8  )
     9  
    10  var ErrNotFound = errors.New("not found ip address list")
    11  
    12  // Dialer 拨号器
    13  type Dialer interface {
    14  	// DialContext 连接
    15  	DialContext(ctx context.Context, network, address string) (net.Conn, error)
    16  }
    17  
    18  // Resolver 解析器
    19  type Resolver interface {
    20  	// LookupIPAddr 通过主机搜索 ip 地址列表
    21  	LookupIPAddr(ctx context.Context, host string) ([]net.IPAddr, error)
    22  }
    23  
    24  // DNS 域名解析器
    25  type DNS interface {
    26  	Resolver
    27  
    28  	// GetDialContext 获取 Dial 函数
    29  	GetDialContext() func(ctx context.Context, network, address string) (net.Conn, error)
    30  }
    31  
    32  // EmptyIpCache 空的 ip 缓存信息
    33  var EmptyIpCache = IpCache{}
    34  
    35  // IpCache ip 缓存信息
    36  type IpCache struct {
    37  	IPAddrs   []net.IPAddr // ip 列表
    38  	CreatedAt time.Time    // 创建时间,如果不设置,则表示永久有效
    39  }
    40  
    41  // CacheDNS 带缓存的域名解析器
    42  type CacheDNS interface {
    43  	DNS
    44  
    45  	// Set 设置 host 对应的 ip 缓存信息
    46  	Set(host string, cache IpCache)
    47  	// Remove 删除 host 对应的 ip 缓存信息
    48  	Remove(host string)
    49  	// Get 获取 host 对应的 ip 缓存信息
    50  	Get(host string) (IpCache, bool)
    51  }