resolver.go 598 B

1234567891011121314151617181920212223242526272829
  1. package dialer
  2. import (
  3. "context"
  4. "net"
  5. "net/netip"
  6. )
  7. func init() {
  8. // We must use this DialContext to query DNS
  9. // when using net default resolver.
  10. net.DefaultResolver.PreferGo = true
  11. net.DefaultResolver.Dial = resolverDialContext
  12. }
  13. func resolverDialContext(ctx context.Context, network, address string) (net.Conn, error) {
  14. d := &net.Dialer{}
  15. interfaceName := DefaultInterface.Load()
  16. if interfaceName != "" {
  17. dstIP, err := netip.ParseAddr(address)
  18. if err == nil {
  19. _ = bindIfaceToDialer(interfaceName, d, network, dstIP)
  20. }
  21. }
  22. return d.DialContext(ctx, network, address)
  23. }