From 2765ad04ca978944b0c00cc30876fc8a3afbda05 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 28 Aug 2014 09:35:13 +1000 Subject: [PATCH] Avoid connecting to the same peer twice by address --- client.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/client.go b/client.go index 92087547..ae20854a 100644 --- a/client.go +++ b/client.go @@ -310,12 +310,19 @@ func (me *Client) initiateConn(peer Peer, torrent *torrent) { if peer.Id == me.peerID { return } + addr := &net.TCPAddr{ + IP: peer.IP, + Port: peer.Port, + } + // Don't connect to the same address twice for the same torrent. + for _, c := range torrent.Conns { + if c.Socket.RemoteAddr().String() == addr.String() { + duplicateConnsAvoided.Add(1) + return + } + } me.halfOpen++ go func() { - addr := &net.TCPAddr{ - IP: peer.IP, - Port: peer.Port, - } // Binding to the listener address and dialing via net.Dialer gives // "address in use" error. It seems it's not possible to dial out from // this address so that peers associate our local address with our