client.go | 10 ++-------- connection.go | 1 + torrent.go | 15 +++++++++++++-- diff --git a/client.go b/client.go index f11e892b81dad5ff136e378426a28a73ad1ad418..898ee23a36cb9c397e89a33726dd1bd946d9143b 100644 --- a/client.go +++ b/client.go @@ -48,9 +48,7 @@ unwantedChunksReceived = expvar.NewInt("chunksReceivedUnwanted") unexpectedChunksReceived = expvar.NewInt("chunksReceivedUnexpected") chunksReceived = expvar.NewInt("chunksReceived") - peersFoundByDHT = expvar.NewInt("peersFoundByDHT") - peersFoundByPEX = expvar.NewInt("peersFoundByPEX") - peersFoundByTracker = expvar.NewInt("peersFoundByTracker") + peersAddedBySource = expvar.NewMap("peersAddedBySource") uploadChunksPosted = expvar.NewInt("uploadChunksPosted") unexpectedCancels = expvar.NewInt("unexpectedCancels") @@ -1700,7 +1698,6 @@ } return }()) me.mu.Unlock() - peersFoundByPEX.Add(int64(len(pexMsg.Added))) }() default: err = fmt.Errorf("unexpected extended message ID: %v", msg.ExtendedID) @@ -1883,9 +1880,8 @@ if p.Port == 0 { // The spec says to scrub these yourselves. Fine. continue } - t.addPeer(p) + t.addPeer(p, me) } - me.openNewConns(t) } func (cl *Client) cachedMetaInfoFilename(ih InfoHash) string { @@ -2331,7 +2327,6 @@ Port: int(cp.Port), }).String() allAddrs[key] = struct{}{} } - peersFoundByDHT.Add(int64(len(addPeers))) cl.mu.Lock() cl.addPeers(t, addPeers) numPeers := len(t.Peers) @@ -2399,7 +2394,6 @@ cl.addPeers(t, peers) cl.mu.Unlock() // log.Printf("%s: %d new peers from %s", t, len(peers), tr) - peersFoundByTracker.Add(int64(len(peers))) time.Sleep(time.Second * time.Duration(resp.Interval)) return nil diff --git a/connection.go b/connection.go index bedb1a9b9209311b86fde72f849733cefaddeb8d..0edda653c6420321fefe40ce31de6fa99849d39d 100644 --- a/connection.go +++ b/connection.go @@ -23,6 +23,7 @@ type peerSource byte const ( + peerSourceTracker = '\x00' // It's the default. peerSourceIncoming = 'I' peerSourceDHT = 'H' peerSourcePEX = 'X' diff --git a/torrent.go b/torrent.go index 79a6a1599aedf76501eea19ae2c7cc3693ec3483..82d97a49051def3514e0de8c219be56a80f4ebb9 100644 --- a/torrent.go +++ b/torrent.go @@ -181,8 +181,19 @@ c.Close() } } -func (t *torrent) addPeer(p Peer) { - t.Peers[peersKey{string(p.IP), p.Port}] = p +func (t *torrent) addPeer(p Peer, cl *Client) { + cl.openNewConns(t) + if len(t.Peers) >= torrentPeersHighWater { + return + } + key := peersKey{string(p.IP), p.Port} + if _, ok := t.Peers[key]; ok { + return + } + t.Peers[key] = p + peersAddedBySource.Add(string(p.Source), 1) + cl.openNewConns(t) + } func (t *torrent) invalidateMetadata() {