fix: fast-path hasInternet() via carrier check to avoid nmcli cache delay
Made-with: Cursor
This commit is contained in:
@@ -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 → 立即返回 false(nmcli 有缓存,不可信)
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user