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';
|
'use strict';
|
||||||
|
|
||||||
const { execSync } = require('child_process');
|
const { execSync } = require('child_process');
|
||||||
|
const fs = require('fs');
|
||||||
const log = require('./logger');
|
const log = require('./logger');
|
||||||
|
|
||||||
const AP_SSID_PREFIX = 'ClawBox-';
|
const AP_SSID_PREFIX = 'ClawBox-';
|
||||||
const AP_IP = '10.42.0.1';
|
const AP_IP = '10.42.0.1';
|
||||||
const AP_PASSWORD = '12345678';
|
const AP_PASSWORD = '12345678';
|
||||||
const AP_IFACE = process.env.CLAWD_WIFI_IFACE || '';
|
const AP_IFACE = process.env.CLAWD_WIFI_IFACE || '';
|
||||||
|
const ETH_IFACE = process.env.CLAWD_ETH_IFACE || 'eth0';
|
||||||
const CON_NAME = 'clawd-hotspot';
|
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 连通性)
|
* 检测是否有互联网连接(尝试 DNS 解析 + HTTP 连通性)
|
||||||
*/
|
*/
|
||||||
function hasInternet() {
|
function hasInternet() {
|
||||||
|
// 物理层快检:无 WiFi STA 且有线 carrier=0 → 立即返回 false(nmcli 有缓存,不可信)
|
||||||
|
if (!isWifiStaConnected() && !hasWiredCarrier()) return false;
|
||||||
|
|
||||||
// 优先用 nmcli 的 connectivity check
|
// 优先用 nmcli 的 connectivity check
|
||||||
try {
|
try {
|
||||||
const out = run('nmcli networking connectivity check').trim();
|
const out = run('nmcli networking connectivity check').trim();
|
||||||
@@ -208,6 +225,7 @@ function isWifiStaConnected() {
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
hasInternet,
|
hasInternet,
|
||||||
|
hasWiredCarrier,
|
||||||
hasSavedWifiConnection,
|
hasSavedWifiConnection,
|
||||||
isWifiStaConnected,
|
isWifiStaConnected,
|
||||||
getWifiIface,
|
getWifiIface,
|
||||||
|
|||||||
Reference in New Issue
Block a user