add .gitignore
[swift-upb.git] / send_control.cpp
index 951685f..130e9bd 100644 (file)
@@ -23,6 +23,7 @@ const char* Channel::SEND_CONTROL_MODES[] = {"keepalive", "pingpong",
 
 
 tint    Channel::NextSendTime () {
+    TimeoutDataOut(); // precaution to know free cwnd
     switch (send_control_) {
         case KEEP_ALIVE_CONTROL: return KeepAliveNextSendTime();
         case PING_PONG_CONTROL:  return PingPongNextSendTime();
@@ -39,7 +40,7 @@ tint    Channel::SwitchSendControl (int control_mode) {
             SEND_CONTROL_MODES[send_control_],SEND_CONTROL_MODES[control_mode]);
     switch (control_mode) {
         case KEEP_ALIVE_CONTROL:
-            send_interval_ = max(TINT_SEC/10,rtt_avg_);
+            send_interval_ = rtt_avg_; //max(TINT_SEC/10,rtt_avg_);
             dev_avg_ = max(TINT_SEC,rtt_avg_);
             data_out_cap_ = bin64_t::ALL;
             cwnd_ = 1;
@@ -72,7 +73,8 @@ tint    Channel::KeepAliveNextSendTime () {
         return SwitchSendControl(SLOW_START_CONTROL);
     if (data_in_.time!=TINT_NEVER)
         return NOW;
-    send_interval_ <<= 1;
+    if (last_send_time_==NOW)
+        send_interval_ <<= 1;
     if (send_interval_>MAX_SEND_INTERVAL)
         send_interval_ = MAX_SEND_INTERVAL;
     return last_send_time_ + send_interval_;
@@ -98,7 +100,7 @@ tint    Channel::CwndRateNextSendTime () {
     //if (last_recv_time_<NOW-rtt_avg_*4)
     //    return SwitchSendControl(KEEP_ALIVE_CONTROL);
     send_interval_ = rtt_avg_/cwnd_;
-    if (send_interval_>std::max(rtt_avg_,TINT_SEC)*4)
+    if (send_interval_>max(rtt_avg_,TINT_SEC)*4)
         return SwitchSendControl(KEEP_ALIVE_CONTROL);
     if (data_out_.size()<cwnd_) {
         dprintf("%s #%u sendctrl next in %llius (cwnd %.2f, data_out %i)\n",