From b1d20bc55135b330633ec7832b00feefeb737f01 Mon Sep 17 00:00:00 2001 From: paladz <453256728@qq.com> Date: Thu, 26 Apr 2018 17:34:48 +0800 Subject: [PATCH] try to fix seed handshak fail --- p2p/pex_reactor.go | 6 ++++++ p2p/switch.go | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/p2p/pex_reactor.go b/p2p/pex_reactor.go index a76bd25a..58fc9415 100644 --- a/p2p/pex_reactor.go +++ b/p2p/pex_reactor.go @@ -122,6 +122,12 @@ func (r *PEXReactor) AddPeer(p *Peer) error { } r.book.AddAddress(addr, addr) } + if r.sw.peers.Size() >= r.sw.config.MaxNumPeers { + if ok := r.SendAddrs(p, r.book.GetSelection()); ok { + r.sw.StopPeerGracefully(p) + } + return errors.New("Error in AddPeer: reach the max peer, exchange then close") + } return nil } diff --git a/p2p/switch.go b/p2p/switch.go index b53924fa..9278e350 100644 --- a/p2p/switch.go +++ b/p2p/switch.go @@ -500,15 +500,15 @@ func (sw *Switch) listenerRoutine(l Listener) { break } - // ignore connection if we already have enough - maxPeers := sw.config.MaxNumPeers - if maxPeers <= sw.peers.Size() { + // disconnect if we alrady have 2 * MaxNumPeers, we do this because we wanna address book get exchanged even if + // the connect is full. The pex will disconnect the peer after address exchange, the max connected peer won't + // be double of MaxNumPeers + if sw.config.MaxNumPeers*2 <= sw.peers.Size() { // close inConn inConn.Close() log.WithFields(log.Fields{ "address": inConn.RemoteAddr().String(), "numPeers": sw.peers.Size(), - "max": maxPeers, }).Info("Ignoring inbound connection: already have enough peers") continue } -- 2.11.0