diff --git a/td/mtproto/SessionConnection.cpp b/td/mtproto/SessionConnection.cpp index 96284fbfe..f6605215a 100644 --- a/td/mtproto/SessionConnection.cpp +++ b/td/mtproto/SessionConnection.cpp @@ -800,8 +800,8 @@ void SessionConnection::flush_packet() { if (mode_ == Mode::HttpLongPoll) { max_delay = HTTP_MAX_DELAY; max_after = HTTP_MAX_AFTER; - max_wait = min(http_max_wait(), - static_cast(1000 * max(0.1, ping_disconnect_delay() + last_pong_at_ - Time::now_cached() - 1))); + auto time_to_disconnect = ping_disconnect_delay() + last_pong_at_ - Time::now_cached(); + max_wait = min(http_max_wait(), static_cast(1000 * max(0.1, time_to_disconnect - rtt()))); } else if (mode_ == Mode::Http) { max_delay = HTTP_MAX_DELAY; max_after = HTTP_MAX_AFTER; diff --git a/td/mtproto/SessionConnection.h b/td/mtproto/SessionConnection.h index 033732940..b4ec6a39c 100644 --- a/td/mtproto/SessionConnection.h +++ b/td/mtproto/SessionConnection.h @@ -125,7 +125,7 @@ class SessionConnection bool online_flag_ = false; int rtt() const { - return max(2, static_cast(raw_connection_->rtt_ * 1.5)); + return max(2, static_cast(raw_connection_->rtt_ * 1.5 + 1)); } int32 ping_disconnect_delay() const {