diff --git a/neo/Network/P2P/LocalNode.cs b/neo/Network/P2P/LocalNode.cs index 79ad7fb096..0efd8a3287 100644 --- a/neo/Network/P2P/LocalNode.cs +++ b/neo/Network/P2P/LocalNode.cs @@ -20,6 +20,7 @@ internal class RelayDirectly { public IInventory Inventory; } internal class SendDirectly { public IInventory Inventory; } public const uint ProtocolVersion = 0; + private const int MaxCountFromSeedList = 5; private static readonly object lockObj = new object(); private readonly NeoSystem system; @@ -123,7 +124,7 @@ public IEnumerable GetUnconnectedPeers() protected override void NeedMorePeers(int count) { - count = Math.Max(count, 5); + count = Math.Max(count, MaxCountFromSeedList); if (ConnectedPeers.Count > 0) { BroadcastMessage(MessageCommand.GetAddr); diff --git a/neo/Network/P2P/Peer.cs b/neo/Network/P2P/Peer.cs index 0cbd6cbaff..0665567fc8 100644 --- a/neo/Network/P2P/Peer.cs +++ b/neo/Network/P2P/Peer.cs @@ -66,7 +66,7 @@ protected void AddPeers(IEnumerable peers) { if (UnconnectedPeers.Count < UnconnectedMax) { - peers = peers.Where(p => p.Port != ListenerTcpPort || !localAddresses.Contains(p.Address)); + peers = peers.Where(p => (p.Port != ListenerTcpPort || !localAddresses.Contains(p.Address)) && !ConnectedPeers.Values.Contains(p)); ImmutableInterlocked.Update(ref UnconnectedPeers, p => p.Union(peers)); } }