From: Matt Joiner Date: Fri, 19 Dec 2014 23:09:11 +0000 (+1100) Subject: dht: Use both bootstrap addrs, as they seem to take turns going down X-Git-Tag: v1.0.0~1390 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=20d45494301106b8b108516fbde913ff01c0935c;p=btrtrc.git dht: Use both bootstrap addrs, as they seem to take turns going down --- diff --git a/dht/dht.go b/dht/dht.go index d1abce94..002a3132 100644 --- a/dht/dht.go +++ b/dht/dht.go @@ -909,17 +909,32 @@ func (s *Server) getPeers(addr dHTAddr, infoHash string) (t *transaction, err er return } -func bootstrapAddr() (*net.UDPAddr, error) { - return net.ResolveUDPAddr("udp4", "router.utorrent.com:6881") +func bootstrapAddrs() (addrs []*net.UDPAddr, err error) { + for _, addrStr := range []string{ + "router.utorrent.com:6881", + "router.bittorrent.com:6881", + } { + udpAddr, err := net.ResolveUDPAddr("udp4", addrStr) + if err != nil { + continue + } + addrs = append(addrs, udpAddr) + } + if len(addrs) == 0 { + err = errors.New("nothing resolved") + } + return } -func (s *Server) addRootNode() error { - addr, err := bootstrapAddr() +func (s *Server) addRootNodes() error { + addrs, err := bootstrapAddrs() if err != nil { return err } - s.nodes[addr.String()] = &Node{ - addr: newDHTAddr(addr), + for _, addr := range addrs { + s.nodes[addr.String()] = &Node{ + addr: newDHTAddr(addr), + } } return nil } @@ -929,7 +944,7 @@ func (s *Server) bootstrap() (err error) { s.mu.Lock() defer s.mu.Unlock() if len(s.nodes) == 0 { - err = s.addRootNode() + err = s.addRootNodes() } if err != nil { return diff --git a/dht/getpeers.go b/dht/getpeers.go index b3ecbe64..ed8b0e59 100644 --- a/dht/getpeers.go +++ b/dht/getpeers.go @@ -37,11 +37,13 @@ func (s *Server) GetPeers(infoHash string) (*peerStream, error) { }() s.mu.Unlock() if len(startAddrs) == 0 { - addr, err := bootstrapAddr() + addrs, err := bootstrapAddrs() if err != nil { return nil, err } - startAddrs = append(startAddrs, addr) + for _, addr := range addrs { + startAddrs = append(startAddrs, addr) + } } disc := &peerDiscovery{ peerStream: &peerStream{