From b5c25ff768c2629ec2f5d2b987ed193c9b859992 Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Wed, 23 Jul 2014 11:22:35 -0700 Subject: [PATCH] Distinguish between network/decode errors in network message decode It is now visible that EOF (i.e. peer hung up) is interpreted as a message decode error. Probably what we want to do is reset the connection on any error. TODO --- src/network/socket.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/network/socket.rs b/src/network/socket.rs index be28f0cf..01d74802 100644 --- a/src/network/socket.rs +++ b/src/network/socket.rs @@ -28,6 +28,7 @@ use network::address::Address; use network::message::{RawNetworkMessage, NetworkMessage, Version}; use network::serialize::Serializable; use network::message_network::VersionMessage; +use util::misc::prepend_err; /// Format an IP address in the 16-byte bitcoin protocol serialization fn ipaddr_to_bitcoin_addr(ipaddr: &ip::IpAddr) -> [u8, ..16] { @@ -182,11 +183,11 @@ impl Socket { // Return match read_err { // Network errors get priority since they are probably more meaningful - Some(e) => Err(e), + Some(e) => prepend_err("network", Err(e)), _ => { match ret { // Next come parse errors - Err(e) => Err(e), + Err(e) => prepend_err("decode", Err(e)), Ok(ret) => { // Finally magic (this should come before parse error, but we can't // get to it if the deserialization failed). TODO restructure this