]> Sergey Matveev's repositories - btrtrc.git/commitdiff
dht: Message only the most likely peers
authorMatt Joiner <anacrolix@gmail.com>
Thu, 24 Jul 2014 03:45:18 +0000 (13:45 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 24 Jul 2014 03:45:18 +0000 (13:45 +1000)
dht/dht.go

index abcc7a427599dec9e05a2b3d8f1388eecb93cb31..3cb1f0f47e81c8cf3ea776555efee0f0e5497a3d 100644 (file)
@@ -626,7 +626,7 @@ func (s *Server) GetPeers(infoHash string) (ps *peerStream, err error) {
        done := make(chan struct{})
        pending := 0
        s.mu.Lock()
-       for _, n := range s.nodes {
+       for _, n := range s.closestGoodNodes(160, infoHash) {
                var t *transaction
                t, err = s.getPeers(n.addr, infoHash)
                if err != nil {
@@ -727,13 +727,22 @@ func (s *Server) Bootstrap() (err error) {
                }
                s.mu.Lock()
                // log.Printf("now have %d nodes", len(s.nodes))
-               if len(s.nodes) >= 8*160 {
+               if s.numGoodNodes() >= 160 {
                        break
                }
        }
        return
 }
 
+func (s *Server) numGoodNodes() (num int) {
+       for _, n := range s.nodes {
+               if n.Good() {
+                       num++
+               }
+       }
+       return
+}
+
 func (s *Server) NumNodes() int {
        s.mu.Lock()
        defer s.mu.Unlock()