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:
parent
da8ac9fe01
commit
85a0fe6b61
15
torrent.go
15
torrent.go
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue