From eb0ebab2d3e9c0a9c0db3b1e176c56d7f580ccef Mon Sep 17 00:00:00 2001 From: Ignotus Peverell Date: Mon, 5 Feb 2018 23:09:57 +0000 Subject: [PATCH] Add forgotten ping loop, fix TCP send interlacing --- p2p/src/conn.rs | 13 ++++++------- p2p/src/msg.rs | 16 ++++++++-------- p2p/src/serv.rs | 10 ++++++---- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/p2p/src/conn.rs b/p2p/src/conn.rs index b362c9662..9dd366893 100644 --- a/p2p/src/conn.rs +++ b/p2p/src/conn.rs @@ -87,9 +87,8 @@ impl Tracker { where T: ser::Writeable { - let (header_buf, body_buf) = write_to_bufs(body, msg_type); - self.send_channel.send(header_buf)?; - self.send_channel.send(body_buf)?; + let buf = write_to_buf(body, msg_type); + self.send_channel.send(buf)?; Ok(()) } } @@ -175,8 +174,8 @@ where }); } -fn respond(send_tx: &mpsc::Sender>, msg_type: Type, body: Vec) { - let header = ser::ser_vec(&MsgHeader::new(msg_type, body.len() as u64)).unwrap(); - send_tx.send(header).unwrap(); - send_tx.send(body).unwrap(); +fn respond(send_tx: &mpsc::Sender>, msg_type: Type, mut body: Vec) { + let mut msg = ser::ser_vec(&MsgHeader::new(msg_type, body.len() as u64)).unwrap(); + msg.append(&mut body); + send_tx.send(msg).unwrap(); } diff --git a/p2p/src/msg.rs b/p2p/src/msg.rs index cfe6bdf38..05b993785 100644 --- a/p2p/src/msg.rs +++ b/p2p/src/msg.rs @@ -158,10 +158,10 @@ where read_body(&header, conn) } -pub fn write_to_bufs( +pub fn write_to_buf( msg: T, msg_type: Type, -) -> (Vec, Vec) +) -> Vec where T: Writeable, { @@ -170,11 +170,12 @@ where ser::serialize(&mut body_buf, &msg).unwrap(); // build and serialize the header using the body size - let mut header_buf = vec![]; + let mut msg_buf = vec![]; let blen = body_buf.len() as u64; - ser::serialize(&mut header_buf, &MsgHeader::new(msg_type, blen)).unwrap(); + ser::serialize(&mut msg_buf, &MsgHeader::new(msg_type, blen)).unwrap(); + msg_buf.append(&mut body_buf); - (header_buf, body_buf) + msg_buf } pub fn write_message( @@ -185,10 +186,9 @@ pub fn write_message( where T: Writeable + 'static, { - let (header_buf, body_buf) = write_to_bufs(msg, msg_type); + let buf = write_to_buf(msg, msg_type); // send the whole thing - conn.write_all(&header_buf[..])?; - conn.write_all(&body_buf[..])?; + conn.write_all(&buf[..])?; Ok(()) } diff --git a/p2p/src/serv.rs b/p2p/src/serv.rs index bc32171cb..4008ba33e 100644 --- a/p2p/src/serv.rs +++ b/p2p/src/serv.rs @@ -65,10 +65,12 @@ impl Server { // start peer monitoring thread let peers_inner = self.peers.clone(); let _ = thread::Builder::new().name("p2p-monitor".to_string()).spawn(move || { - let total_diff = peers_inner.total_difficulty(); - let total_height = peers_inner.total_height(); - peers_inner.check_all(total_diff, total_height); - thread::sleep(Duration::from_secs(20)); + loop { + let total_diff = peers_inner.total_difficulty(); + let total_height = peers_inner.total_height(); + peers_inner.check_all(total_diff, total_height); + thread::sleep(Duration::from_secs(20)); + } }); // start TCP listener and handle incoming connections