| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package core
- import (
- "net"
- "sync"
- "v2ray.com/core/common"
- "v2ray.com/core/features/dns"
- )
- type syncDNSClient struct {
- sync.RWMutex
- dns.Client
- }
- func (d *syncDNSClient) LookupIP(host string) ([]net.IP, error) {
- d.RLock()
- defer d.RUnlock()
- if d.Client == nil {
- return net.LookupIP(host)
- }
- return d.Client.LookupIP(host)
- }
- func (d *syncDNSClient) Start() error {
- d.RLock()
- defer d.RUnlock()
- if d.Client == nil {
- return nil
- }
- return d.Client.Start()
- }
- func (d *syncDNSClient) Close() error {
- d.RLock()
- defer d.RUnlock()
- return common.Close(d.Client)
- }
- func (d *syncDNSClient) Set(client dns.Client) {
- if client == nil {
- return
- }
- d.Lock()
- defer d.Unlock()
- common.Close(d.Client) // nolint: errcheck
- d.Client = client
- }
|