From 3d5942b3d49c808516fbaec1685efbc6cb3ad9cb Mon Sep 17 00:00:00 2001 From: Keith Winstein Date: Wed, 10 Aug 2011 02:17:04 -0400 Subject: [PATCH] Prevent endless cascade of RTT acks --- network.cpp | 12 +++++++++--- network.hpp | 2 +- networktransport.cpp | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/network.cpp b/network.cpp index 05bc0a1..927c8f9 100644 --- a/network.cpp +++ b/network.cpp @@ -148,11 +148,17 @@ void Connection::update_MTU( void ) fprintf( stderr, "Path MTU: %d\n", MTU ); } -void Connection::send( string &s ) +void Connection::send( string &s, bool send_timestamp ) { assert( attached ); - string p = new_packet( s ).tostring( &session ); + Packet px = new_packet( s ); + + if ( !send_timestamp ) { + px.timestamp = -1; + } + + string p = px.tostring( &session ); /* XXX synthetic packet loss */ if ( rand() < RAND_MAX / 2 ) { @@ -258,7 +264,7 @@ uint64_t Network::timestamp( void ) } uint64_t millis = tp.tv_nsec / 1000000; - millis += uint64_t( tp.tv_sec ) * 1000000; + millis += uint64_t( tp.tv_sec ) * 1000; return millis; } diff --git a/network.hpp b/network.hpp index bb14e1b..46c2398 100644 --- a/network.hpp +++ b/network.hpp @@ -85,7 +85,7 @@ namespace Network { Connection(); Connection( const char *key_str, const char *ip, int port ); - void send( string &s ); + void send( string &s, bool send_timestamp = true ); string recv( void ); int fd( void ) { return sock; } int get_MTU( void ) { return MTU; } diff --git a/networktransport.cpp b/networktransport.cpp index 2507e40..d5e610b 100644 --- a/networktransport.cpp +++ b/networktransport.cpp @@ -89,7 +89,7 @@ void Transport::send_to_receiver( void ) sent_states.front().num, "" ); string s = inst.tostring(); - connection.send( s ); + connection.send( s, false ); assumed_receiver_state->timestamp = timestamp(); return;