diff --git a/p2p/discovery/mdns.go b/p2p/discovery/mdns.go index 6ab3db1e0a634fc9388abcc56d156db9b654c873..74f2c085be91e72cefbb69791e016204c55da2ee 100644 --- a/p2p/discovery/mdns.go +++ b/p2p/discovery/mdns.go @@ -42,21 +42,22 @@ 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() { - if manet.IsIPLoopback(addr) { - continue - } na, err := manet.ToNetAddr(addr) if err != nil { continue } 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) { @@ -67,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()