diff --git a/discovery/mdns.go b/discovery/mdns.go index 1abd3bd2..74f2c085 100644 --- a/discovery/mdns.go +++ b/discovery/mdns.go @@ -42,7 +42,8 @@ type mdnsService struct { interval time.Duration } -func getDialableListenAddr(ph host.Host) (*net.TCPAddr, error) { +func getDialableListenAddrs(ph host.Host) ([]*net.TCPAddr, error) { + var out []*net.TCPAddr for _, addr := range ph.Addrs() { na, err := manet.ToNetAddr(addr) if err != nil { @@ -50,10 +51,13 @@ func getDialableListenAddr(ph host.Host) (*net.TCPAddr, error) { } tcp, ok := na.(*net.TCPAddr) if ok { - return tcp, nil + out = append(out, tcp) } } - return nil, errors.New("failed to find good external addr from peerhost") + if len(out) == 0 { + return nil, errors.New("failed to find good external addr from peerhost") + } + return out, nil } func NewMdnsService(peerhost host.Host, interval time.Duration) (Service, error) { @@ -64,12 +68,14 @@ func NewMdnsService(peerhost host.Host, interval time.Duration) (Service, error) var ipaddrs []net.IP port := 4001 - addr, err := getDialableListenAddr(peerhost) + addrs, err := getDialableListenAddrs(peerhost) if err != nil { log.Warning(err) } else { - ipaddrs = []net.IP{addr.IP} - port = addr.Port + port = addrs[0].Port + for _, a := range addrs { + ipaddrs = append(ipaddrs, a.IP) + } } myid := peerhost.ID().Pretty()