From 5ecc4e890b814ec20ab601999b6548090720e87f Mon Sep 17 00:00:00 2001
From: Jeromy <jeromyj@gmail.com>
Date: Wed, 29 Apr 2015 01:02:45 -0700
Subject: [PATCH] use ALL THE ADDRESSES!

---
 p2p/discovery/mdns.go | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/p2p/discovery/mdns.go b/p2p/discovery/mdns.go
index 6ab3db1e0..74f2c085b 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()
-- 
GitLab