use ALL THE ADDRESSES!
Jeromy committed
Apr 29, 2015 at 01:02 UTC
5ecc4e890b814ec20ab601999b6548090720e87f
1 file changed
+12
-9
p2p/discovery/mdns.go
+12
-9
@@ -42,21 +42,22 @@ type mdnsService struct {
42
interval time.Duration
43
}
44
45
-func getDialableListenAddr(ph host.Host) (*net.TCPAddr, error) {
45
+func getDialableListenAddrs(ph host.Host) ([]*net.TCPAddr, error) {
46
+ var out []*net.TCPAddr
47
for _, addr := range ph.Addrs() {
47
- if manet.IsIPLoopback(addr) {
48
- continue
49
- }
48
na, err := manet.ToNetAddr(addr)
49
if err != nil {
50
continue
51
}
52
tcp, ok := na.(*net.TCPAddr)
53
if ok {
56
- return tcp, nil
54
+ out = append(out, tcp)
55
}
56
}
59
- return nil, errors.New("failed to find good external addr from peerhost")
57
+ if len(out) == 0 {
58
+ return nil, errors.New("failed to find good external addr from peerhost")
59
+ }
60
+ return out, nil
61
}
62
63
func NewMdnsService(peerhost host.Host, interval time.Duration) (Service, error) {
@@ -67,12 +68,14 @@ func NewMdnsService(peerhost host.Host, interval time.Duration) (Service, error)
68
var ipaddrs []net.IP
69
port := 4001
70
70
- addr, err := getDialableListenAddr(peerhost)
71
+ addrs, err := getDialableListenAddrs(peerhost)
72
if err != nil {
73
log.Warning(err)
74
} else {
74
- ipaddrs = []net.IP{addr.IP}
75
- port = addr.Port
75
+ port = addrs[0].Port
76
+ for _, a := range addrs {
77
+ ipaddrs = append(ipaddrs, a.IP)
78
+ }
79
}
80
81
myid := peerhost.ID().Pretty()