From: Matt Joiner Date: Wed, 19 Nov 2014 04:03:21 +0000 (-0600) Subject: Simple connection pruner X-Git-Tag: v1.0.0~1500 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=dd240b66c4ff619ca10e399e9200c855d75adf06;p=btrtrc.git Simple connection pruner --- diff --git a/client.go b/client.go index 4382d6bd..20957cae 100644 --- a/client.go +++ b/client.go @@ -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()