Merge pull request #10 from razvandimescu/fix/fast-network-detect
Reduce network change detection to 5s
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -932,7 +932,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "numa"
|
name = "numa"
|
||||||
version = "0.3.0"
|
version = "0.3.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"axum",
|
"axum",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
|
|||||||
13
src/main.rs
13
src/main.rs
@@ -279,14 +279,17 @@ async fn main() -> numa::Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn network_watch_loop(ctx: Arc<numa::ctx::ServerCtx>) {
|
async fn network_watch_loop(ctx: Arc<numa::ctx::ServerCtx>) {
|
||||||
let mut interval = tokio::time::interval(Duration::from_secs(30));
|
let mut tick: u64 = 0;
|
||||||
|
|
||||||
|
let mut interval = tokio::time::interval(Duration::from_secs(5));
|
||||||
interval.tick().await; // skip immediate tick
|
interval.tick().await; // skip immediate tick
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
interval.tick().await;
|
interval.tick().await;
|
||||||
|
tick += 1;
|
||||||
let mut changed = false;
|
let mut changed = false;
|
||||||
|
|
||||||
// Check LAN IP change
|
// Check LAN IP change (every 5s — cheap, one UDP socket call)
|
||||||
if let Some(new_ip) = numa::lan::detect_lan_ip() {
|
if let Some(new_ip) = numa::lan::detect_lan_ip() {
|
||||||
let mut current_ip = ctx.lan_ip.lock().unwrap();
|
let mut current_ip = ctx.lan_ip.lock().unwrap();
|
||||||
if new_ip != *current_ip {
|
if new_ip != *current_ip {
|
||||||
@@ -296,10 +299,10 @@ async fn network_watch_loop(ctx: Arc<numa::ctx::ServerCtx>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check upstream change (only for auto-detected upstream)
|
// Check upstream change every 30s or immediately on LAN IP change
|
||||||
if ctx.upstream_auto {
|
// (heavier — spawns scutil/ipconfig, only when auto-detected)
|
||||||
|
if ctx.upstream_auto && (changed || tick.is_multiple_of(6)) {
|
||||||
let dns_info = numa::system_dns::discover_system_dns();
|
let dns_info = numa::system_dns::discover_system_dns();
|
||||||
// Use detected upstream, or try DHCP-provided DNS, or fall back to Quad9
|
|
||||||
let new_addr = dns_info
|
let new_addr = dns_info
|
||||||
.default_upstream
|
.default_upstream
|
||||||
.or_else(numa::system_dns::detect_dhcp_dns)
|
.or_else(numa::system_dns::detect_dhcp_dns)
|
||||||
|
|||||||
Reference in New Issue
Block a user