diff --git a/p2p/connmanager.go b/p2p/connmanager.go index 640cbdcd6f..fbfb4ad1cb 100644 --- a/p2p/connmanager.go +++ b/p2p/connmanager.go @@ -131,7 +131,10 @@ func (cm *connManager) numPeers() (int, int, int) { // dropRandomPeer selects one of the peers randomly and drops it from the peer pool. func (cm *connManager) dropRandomPeer() bool { peers := cm.peersFunc() - droppable := peers + + // only drop from dialed peers + selectDroppable := func(p *Peer) bool { return !p.rw.is(inboundConn) } + droppable := filter(peers, selectDroppable) if len(droppable) > 0 { p := droppable[cm.rand.Intn(len(droppable))] cm.log.Trace("dropping random peer", "id", p.ID(), "duration", common.PrettyDuration(mclock.Now()-p.created), "peercountbefore", len(peers))