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;