]> Sergey Matveev's repositories - btrtrc.git/commitdiff
dht: Use both bootstrap addrs, as they seem to take turns going down
authorMatt Joiner <anacrolix@gmail.com>
Fri, 19 Dec 2014 23:09:11 +0000 (10:09 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Fri, 19 Dec 2014 23:09:11 +0000 (10:09 +1100)
dht/dht.go
dht/getpeers.go

index d1abce948e239d182a44933d1e674e86889f64bc..002a3132bca8508cbe686c90bc1604f3ee751ee9 100644 (file)
@@ -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
index b3ecbe64349321cb3003071d5180ee1e88f4886e..ed8b0e59db446e6436031db1098e63a67b4c0130 100644 (file)
@@ -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{