diff --git a/src/neo/Network/P2P/RemoteNode.ProtocolHandler.cs b/src/neo/Network/P2P/RemoteNode.ProtocolHandler.cs index 8dffaa0dc5..8cda813e72 100644 --- a/src/neo/Network/P2P/RemoteNode.ProtocolHandler.cs +++ b/src/neo/Network/P2P/RemoteNode.ProtocolHandler.cs @@ -121,6 +121,9 @@ private void OnMessage(Message msg) private void OnAddrMessageReceived(AddrPayload payload) { + ref bool sent = ref sentCommands[(byte)MessageCommand.GetAddr]; + if (!sent) return; + sent = false; system.LocalNode.Tell(new Peer.Peers { EndPoints = payload.AddressList.Select(p => p.EndPoint).Where(p => p.Port > 0) diff --git a/src/neo/Network/P2P/RemoteNode.cs b/src/neo/Network/P2P/RemoteNode.cs index 15bb8c342c..d5012f5e01 100644 --- a/src/neo/Network/P2P/RemoteNode.cs +++ b/src/neo/Network/P2P/RemoteNode.cs @@ -22,6 +22,7 @@ internal class Relay { public IInventory Inventory; } private readonly NeoSystem system; private readonly Queue message_queue_high = new Queue(); private readonly Queue message_queue_low = new Queue(); + private readonly bool[] sentCommands = new bool[1 << sizeof(MessageCommand)]; private ByteString msg_buffer = ByteString.Empty; private bool ack = true; @@ -197,6 +198,7 @@ private void SendMessage(Message message) { ack = false; SendData(ByteString.FromBytes(message.ToArray())); + sentCommands[(byte)message.Command] = true; } private Message TryParseMessage()