From 53515820ea4d6b4ce068989efb095bb07e6bbf72 Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Sun, 25 Jan 2026 20:56:40 +0100 Subject: [PATCH] Fix: #292 RTT display showing 0 or 1 instead of actual milliseconds - Convert srtt from seconds to milliseconds before sending in Heartbeat (srtt is stored in seconds but Ping field expects milliseconds) - Add input validation in RttEstimator::update_from_sample to filter abnormal RTT values (<=0 or >30000ms) --- client/KernelManager.cpp | 2 +- client/KernelManager.h | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/client/KernelManager.cpp b/client/KernelManager.cpp index 41b30eb..2a0abcb 100644 --- a/client/KernelManager.cpp +++ b/client/KernelManager.cpp @@ -1008,7 +1008,7 @@ int AuthKernelManager::SendHeartbeat() ActivityWindow checker; auto s = checker.Check(); - Heartbeat a(s, m_nNetPing.srtt); + Heartbeat a(s, (int)(m_nNetPing.srtt * 1000)); // srtt是秒,转为毫秒 a.HasSoftware = SoftwareCheck(m_settings.DetectSoftware); iniFile THIS_CFG; diff --git a/client/KernelManager.h b/client/KernelManager.h index bb016bb..5496bef 100644 --- a/client/KernelManager.h +++ b/client/KernelManager.h @@ -102,6 +102,11 @@ struct RttEstimator { void update_from_sample(double rtt_ms) { + // 过滤异常值:RTT应在合理范围内 (0, 30000] 毫秒 + if (rtt_ms <= 0 || rtt_ms > 30000) { + return; + } + const double alpha = 1.0 / 8; const double beta = 1.0 / 4; @@ -158,7 +163,7 @@ public: ActivityWindow checker; auto s = checker.Check(); - Heartbeat a(s, m_nNetPing.srtt); + Heartbeat a(s, (int)(m_nNetPing.srtt * 1000)); // srtt是秒,转为毫秒 a.HasSoftware = SoftwareCheck(m_settings.DetectSoftware);