2
0
mirror of synced 2025-02-24 14:48:27 +00:00

Simple connection pruner

This commit is contained in:
Matt Joiner 2014-11-18 22:03:21 -06:00
parent eacc624115
commit dd240b66c4

View File

@ -1301,9 +1301,32 @@ func (cl *Client) AddMagnet(uri string) (t Torrent, err error) {
if err != nil {
t.Close()
}
go cl.connectionPruner(t.torrent)
return
}
func (cl *Client) connectionPruner(t *torrent) {
for {
time.Sleep(15 * time.Second)
cl.mu.Lock()
license := len(t.Conns) - (socketsPerTorrent+1)/2
for _, c := range t.Conns {
if license <= 0 {
break
}
if time.Now().Sub(c.lastUsefulChunkReceived) < time.Minute {
continue
}
if time.Now().Sub(c.completedHandshake) < time.Minute {
continue
}
c.Close()
license--
}
cl.mu.Unlock()
}
}
func (me *Client) DropTorrent(infoHash InfoHash) (err error) {
me.mu.Lock()
defer me.mu.Unlock()