fix: fast-path hasInternet() via carrier check to avoid nmcli cache delay

Made-with: Cursor
This commit is contained in:
stswangzhiping
2026-03-20 08:00:25 +08:00
parent 08fa4eefaa
commit 5ba8b7bffa

View File

@@ -1,18 +1,35 @@
'use strict';
const { execSync } = require('child_process');
const fs = require('fs');
const log = require('./logger');
const AP_SSID_PREFIX = 'ClawBox-';
const AP_IP = '10.42.0.1';
const AP_PASSWORD = '12345678';
const AP_IFACE = process.env.CLAWD_WIFI_IFACE || '';
const ETH_IFACE = process.env.CLAWD_ETH_IFACE || 'eth0';
const CON_NAME = 'clawd-hotspot';
/**
* 检查有线网卡物理链路是否接通(读 sysfs carrier无延迟
*/
function hasWiredCarrier() {
try {
const carrier = fs.readFileSync(`/sys/class/net/${ETH_IFACE}/carrier`, 'utf8').trim();
return carrier === '1';
} catch (_) {
return false;
}
}
/**
* 检测是否有互联网连接(尝试 DNS 解析 + HTTP 连通性)
*/
function hasInternet() {
// 物理层快检:无 WiFi STA 且有线 carrier=0 → 立即返回 falsenmcli 有缓存,不可信)
if (!isWifiStaConnected() && !hasWiredCarrier()) return false;
// 优先用 nmcli 的 connectivity check
try {
const out = run('nmcli networking connectivity check').trim();
@@ -208,6 +225,7 @@ function isWifiStaConnected() {
module.exports = {
hasInternet,
hasWiredCarrier,
hasSavedWifiConnection,
isWifiStaConnected,
getWifiIface,