From b2e72db31b8327ea11dc081cd2273667862c8e54 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Mon, 1 Jun 2026 19:43:39 +0300 Subject: [PATCH] =?UTF-8?q?etcp:=20link=5Fstatus=20=3D=20remote=5Fkeepaliv?= =?UTF-8?q?e=20&&=20recv=5Fkeepalive=20(=D0=B2=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=BE=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20remote)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - link_status теперь требует двусторонней слышимости: remote && local - recv_keepalive восстанавливается ДО вычисления link_status (избегает заклинивания) - loadbalancer_link_ready по переходу 0→1 с проверкой was_up --- src/etcp_connections.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/etcp_connections.c b/src/etcp_connections.c index a0ce911d..6474294e 100644 --- a/src/etcp_connections.c +++ b/src/etcp_connections.c @@ -1569,21 +1569,23 @@ process_decrypted: pkt->noencrypt_len=0; pkt->link=link; - link->remote_keepalive=pkt->flag_up; - if ( link->remote_keepalive && !link->link_status && link->initialized) loadbalancer_link_ready(link);// up выставляем только если и remote=up и local=up - link->link_status=link->remote_keepalive; + link->remote_keepalive = pkt->flag_up; - link->last_recv_local_time=get_time_tb(); - link->last_recv_timestamp=pkt->timestamp; - link->last_recv_updated=1; - - // Mark link as up when receiving packets + /* restore recv_keepalive BEFORE computing link_status = remote && local */ if (link->recv_keepalive != 1) { link->recv_keepalive = 1; -// loadbalancer_link_ready(link); DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] Link %p (local_id=%d) status changed to UP - packet received", link->etcp->log_name, link, link->local_link_id); } + + int was_up = link->link_status; + link->link_status = link->remote_keepalive && link->recv_keepalive; + if (link->link_status && !was_up && link->initialized) + loadbalancer_link_ready(link); + + link->last_recv_local_time=get_time_tb(); + link->last_recv_timestamp=pkt->timestamp; + link->last_recv_updated=1; // Count decrypted bytes link->total_decrypted += pkt->data_len;