|
|
|
|
@ -340,9 +340,14 @@ static void ka_announce_retry_cb(void* arg) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Анонс-серия (ACTIVE-окно): анонс + ретраи до ACK, лимит попыток на окно.
|
|
|
|
|
// TCP доставляет надёжно — без ретраев и ACK, только один анонс.
|
|
|
|
|
static void ka_announce_burst(struct ETCP_LINK* link) { |
|
|
|
|
link->ka_announce_attempts = 0; |
|
|
|
|
link->ka_sleep_acked = 0; |
|
|
|
|
if (link->is_tcp) { |
|
|
|
|
ka_send_sleep_keepalive(link); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
link->ka_announce_max_attempts = ka_announce_max_calc(link); |
|
|
|
|
ka_send_sleep_keepalive(link); // попытка 1
|
|
|
|
|
ka_arm_announce_retry(link); |
|
|
|
|
@ -507,7 +512,8 @@ int etcp_keepalive_on_recv(struct ETCP_SOCKET* e_sock, struct ETCP_DGRAM* pkt,
|
|
|
|
|
link->etcp->log_name, peer_period, |
|
|
|
|
(int)(active_remaining / 10), (int)(active_remaining % 10), |
|
|
|
|
(int)(sleep_duration / 10), (int)(sleep_duration % 10)); |
|
|
|
|
ka_send_sleep_ack(link); |
|
|
|
|
if (!link->is_tcp) |
|
|
|
|
ka_send_sleep_ack(link); /* TCP доставляет надёжно — ACK не нужен */ |
|
|
|
|
} else if (link->ka_peer_sleeping) { |
|
|
|
|
/* Обычный keepalive (без флагов): пир проснулся — вернуться в normal-режим. */ |
|
|
|
|
link->ka_peer_sleeping = 0; |
|
|
|
|
|