feat(internal/host): prefer ipv4 than ipv6 (#2342)

* feat:prefer ipv4 than ipv6

* feat:prefer ipv4 than ipv6

* feat:prefer ipv4 than ipv6

* feat:prefer ipv4 than ipv6
pull/2367/head
hshe 2 years ago committed by GitHub
parent 0f0c75e20b
commit e176ddfcdd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      internal/host/host.go

@ -51,19 +51,19 @@ func Extract(hostPort string, lis net.Listener) (string, error) {
return "", err return "", err
} }
minIndex := int(^uint(0) >> 1) minIndex := int(^uint(0) >> 1)
var result net.IP ips := make([]net.IP, 0)
for _, iface := range ifaces { for _, iface := range ifaces {
if (iface.Flags & net.FlagUp) == 0 { if (iface.Flags & net.FlagUp) == 0 {
continue continue
} }
if iface.Index >= minIndex && result != nil { if iface.Index >= minIndex && len(ips) != 0 {
continue continue
} }
addrs, err := iface.Addrs() addrs, err := iface.Addrs()
if err != nil { if err != nil {
continue continue
} }
for _, rawAddr := range addrs { for i, rawAddr := range addrs {
var ip net.IP var ip net.IP
switch addr := rawAddr.(type) { switch addr := rawAddr.(type) {
case *net.IPAddr: case *net.IPAddr:
@ -75,13 +75,18 @@ func Extract(hostPort string, lis net.Listener) (string, error) {
} }
if isValidIP(ip.String()) { if isValidIP(ip.String()) {
minIndex = iface.Index minIndex = iface.Index
result = ip if i == 0 {
break ips = make([]net.IP, 0, 1)
}
ips = append(ips, ip)
if ip.To4() != nil {
break
}
} }
} }
} }
if result != nil { if len(ips) != 0 {
return net.JoinHostPort(result.String(), port), nil return net.JoinHostPort(ips[len(ips)-1].String(), port), nil
} }
return "", nil return "", nil
} }

Loading…
Cancel
Save