| 124 | } |
| 125 | |
| 126 | func resolveIPv4(host string) (netip.Addr, error) { |
| 127 | if a, err := netip.ParseAddr(host); err == nil && a.Is4() { |
| 128 | return a, nil |
| 129 | } |
| 130 | addrs, err := net.LookupIP(host) |
| 131 | if err != nil { |
| 132 | return netip.Addr{}, err |
| 133 | } |
| 134 | for _, a := range addrs { |
| 135 | if v4 := a.To4(); v4 != nil { |
| 136 | addr, _ := netip.AddrFromSlice(v4) |
| 137 | return addr, nil |
| 138 | } |
| 139 | } |
| 140 | return netip.Addr{}, fmt.Errorf("no IPv4 address for %s", host) |
| 141 | } |
| 142 | |
| 143 | func defaultIfaceIPv4(remote netip.Addr) (netip.Addr, error) { |
| 144 | c, err := net.Dial("udp", net.JoinHostPort(remote.String(), "1")) |