Shorten RX deadline immediately when a sleeping peer wakes
This commit is contained in:
1 parent
2e66cdb122
commit
85b4af5b1d
2 files changed
+26
-2
No files matched your search
@@ -159,8 +159,14 @@ void etcp_keepalive_watch_rx(struct ETCP_LINK* link) {
|
||||
sleep_ms += (uint64_t)link->keepalive_interval * KA_TIMEOUT_MULT;
|
||||
if (sleep_ms > timeout_ms) timeout_ms = sleep_ms;
|
||||
}
|
||||
uint64_t previous_deadline = link->rx_deadline_tb;
|
||||
link->rx_deadline_tb = link->last_recv_local_time + timeout_ms * 10;
|
||||
if (link->rx_timeout_timer) return;
|
||||
if (link->rx_timeout_timer && link->rx_deadline_tb >= previous_deadline) return;
|
||||
if (link->rx_timeout_timer) {
|
||||
uasync_cancel_timeout(link->etcp->instance->ua, link->rx_timeout_timer); link->rx_timeout_timer = NULL;
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_KEEPALIVE, "[%s] RX deadline shortened link=%u timeout_ms=%llu",
|
||||
link->etcp->log_name, link->local_link_id, (unsigned long long)timeout_ms);
|
||||
}
|
||||
uint64_t now = get_time_tb();
|
||||
uint64_t remaining = link->rx_deadline_tb > now ? link->rx_deadline_tb - now : 1;
|
||||
int delay = remaining > INT_MAX ? INT_MAX : (int)remaining;
|
||||
|
||||
Reference in new issue
Block a user