From b79abd1e277322b1e30a9ad1b4e00b8a5790641a Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Tue, 28 Jan 2020 13:54:09 +0300 Subject: [PATCH] network: detect duplicate connections before handshake completes We can have more than one connection attempt in progress and not yet completed the handshake, so if there is a Version already received we should look it. --- pkg/network/server.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/network/server.go b/pkg/network/server.go index 89357d632..bd8f0f0ab 100644 --- a/pkg/network/server.go +++ b/pkg/network/server.go @@ -350,8 +350,12 @@ func (s *Server) handleVersionCmd(p Peer, version *payload.Version) error { peerAddr := p.PeerAddr().String() s.lock.RLock() for peer := range s.peers { + if p == peer { + continue + } + ver := peer.Version() // Already connected, drop this connection. - if peer.Handshaked() && peer.PeerAddr().String() == peerAddr && peer.Version().Nonce == version.Nonce { + if ver != nil && ver.Nonce == version.Nonce && peer.PeerAddr().String() == peerAddr { s.lock.RUnlock() return errAlreadyConnected }