Drop peers for sending too many unwanted pieces

So the algorithm is now, drop the worst half if they get too old, and drop any connection if it's ratio is poor.
This commit is contained in:
Matt Joiner 2015-08-04 01:32:45 +10:00
parent da8ac9fe01
commit 85a0fe6b61
1 changed files with 9 additions and 6 deletions

View File

@ -745,14 +745,17 @@ func (t *torrent) extentPieces(off, _len int64) (pieces []int) {
func (t *torrent) worstBadConn(cl *Client) *connection {
wcs := t.worstConns(cl)
heap.Init(wcs)
// A connection can only be bad if it's in the worst half, rounded down.
for wcs.Len() > (socketsPerTorrent+1)/2 {
for wcs.Len() != 0 {
c := heap.Pop(wcs).(*connection)
// Give connections 1 minute to prove themselves.
if time.Since(c.completedHandshake) < time.Minute {
continue
if c.UnwantedChunksReceived >= 6 && c.UnwantedChunksReceived > c.UsefulChunksReceived {
return c
}
if wcs.Len() >= (socketsPerTorrent+1)/2 {
// Give connections 1 minute to prove themselves.
if time.Since(c.completedHandshake) > time.Minute {
return c
}
}
return c
}
return nil
}