tint Channel::NextSendTime () {
+ TimeoutDataOut(); // precaution to know free cwnd
switch (send_control_) {
case KEEP_ALIVE_CONTROL: return KeepAliveNextSendTime();
case PING_PONG_CONTROL: return PingPongNextSendTime();
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;
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_;
//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 %f.2, data_out %i)\n",
+ dprintf("%s #%u sendctrl next in %llius (cwnd %.2f, data_out %i)\n",
tintstr(),id_,send_interval_,cwnd_,(int)data_out_.size());
return last_data_out_time_ + send_interval_;
} else {