From 05f0bf7f370c361a0c87d936b9fd03a72cb31dba Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 2 Dec 2014 21:44:27 -0600 Subject: [PATCH] Fixing hangs after junk data. --- rai/core/core.cpp | 7 +++++-- rai/core_test/client.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/rai/core/core.cpp b/rai/core/core.cpp index 64d70d30..67017469 100644 --- a/rai/core/core.cpp +++ b/rai/core/core.cpp @@ -355,22 +355,25 @@ void rai::network::receive_action (boost::system::error_code const & error, size { client.log.add ("Unable to parse message header"); } + ++unknown_count; + receive (); } } else { - ++bad_sender_count; if (network_logging ()) { client.log.add ("Reserved sender"); } + ++bad_sender_count; + receive (); } } else { if (network_logging ()) { - client.log.add ("Receive error"); + client.log.add ("Receive error, shutting down network"); } } } diff --git a/rai/core_test/client.cpp b/rai/core_test/client.cpp index ed74cd2f..f7155ec3 100644 --- a/rai/core_test/client.cpp +++ b/rai/core_test/client.cpp @@ -294,4 +294,30 @@ TEST (client, search_pending) ++iterations2; ASSERT_LT (iterations2, 200); } +} + +TEST (client, connect_after_junk) +{ + rai::system system (24000, 1); + rai::client_init init1; + auto client1 (std::make_shared (init1, system.service, 24001, system.processor, rai::test_genesis_key.pub)); + uint64_t junk; + client1->network.socket.async_send_to (boost::asio::buffer (&junk, sizeof (junk)), system.clients [0]->network.endpoint (), [] (boost::system::error_code const &, size_t) {}); + auto iterations1 (0); + while (system.clients [0]->network.unknown_count == 0) + { + system.service->poll_one (); + system.processor.poll_one (); + ++iterations1; + ASSERT_LT (iterations1, 200); + } + client1->start (); + client1->network.send_keepalive (system.clients [0]->network.endpoint ()); + auto iterations2 (0); + while (client1->peers.empty ()) + { + system.service->poll_one (); + ++iterations2; + ASSERT_LT (iterations2, 200); + } } \ No newline at end of file