From bdfc47d63387db450e9c58f9ef5510c5cfb57a15 Mon Sep 17 00:00:00 2001 From: whitequark Date: Sun, 23 Jul 2017 05:09:38 +0000 Subject: [PATCH] Log correct delay when performing TCP retransmit. Before, the delay was erroneously multiplied by 2 and also did not take processing delay into account. --- src/socket/tcp.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/socket/tcp.rs b/src/socket/tcp.rs index aef13dd..2fa3d57 100644 --- a/src/socket/tcp.rs +++ b/src/socket/tcp.rs @@ -201,17 +201,18 @@ impl Retransmit { } } - fn commit(&mut self, timestamp: u64) -> bool { + fn commit(&mut self, timestamp: u64) -> Option { if self.delay == 0 { self.delay = 100; // ms self.resend_at = timestamp + self.delay; - false + None } else if timestamp >= self.resend_at { + let actual_delay = (timestamp - self.resend_at) + self.delay; self.resend_at = timestamp + self.delay; self.delay *= 2; - true + Some(actual_delay) } else { - false + None } } } @@ -1109,10 +1110,10 @@ impl<'a> TcpSocket<'a> { } if should_send { - if self.retransmit.commit(timestamp) { - net_trace!("[{}]{}:{}: retransmit after {}ms", + if let Some(actual_delay) = self.retransmit.commit(timestamp) { + net_trace!("[{}]{}:{}: retransmitting at t+{}ms ", self.debug_id, self.local_endpoint, self.remote_endpoint, - self.retransmit.delay); + actual_delay); } if self.state != State::SynSent {