浏览代码

优化ping网络检测的代码逻辑

niujiuru 1 月之前
父节点
当前提交
06dc08d189
共有 2 个文件被更改,包括 19 次插入13 次删除
  1. 10 7
      netmgrd/netmgrd.go
  2. 9 6
      netmgrd/ping.go

+ 10 - 7
netmgrd/netmgrd.go

@@ -69,8 +69,11 @@ func serviceRun() {
 		case <-t.C:
 			// 3.1 切换网络-看情况
 			eth0CableOK, _ := isEth0CableConnected()
-			if (eth0CableOK && curNetType != NetEth) || (!eth0CableOK && curNetType != NetLTE) {
-				baseapp.Logger.Warnf("[%s] 网络环境发生变化, 正在切换网络...", MODULE_NAME)
+			if eth0CableOK && curNetType != NetEth { // 有线插入 && 当前不是有线
+				baseapp.Logger.Warnf("[%s] 检测到有线接入,切换到有线网络...", MODULE_NAME)
+				openNetwork()
+			} else if !eth0CableOK && curNetType != NetLTE { // 有线拔出 && 当前不是蜂窝
+				baseapp.Logger.Warnf("[%s] 检测到有线断开,切换到蜂窝网络...", MODULE_NAME)
 				openNetwork()
 			}
 
@@ -230,9 +233,9 @@ func closeEth0Net() {
 func openNetwork() {
 	closeEth0Net()
 	switch curModemType {
-	case Air720U:
+	case Air720U: //合宙4G调制解调器
 		modem1.Stop4GNetwork()
-	case EC200U:
+	case EC200U: // 移远4G调制解调器
 		modem2.Stop4GNetwork()
 	}
 
@@ -245,7 +248,7 @@ func openNetwork() {
 
 	start4GNetwork := func() bool {
 		switch curModemType {
-		case Air720U:
+		case Air720U: //合宙4G调制解调器
 			if eth2CableOK, _ := modem1.Is4GCableConnected(); eth2CableOK {
 				if modem1.Start4GNetwork() {
 					return true
@@ -255,7 +258,7 @@ func openNetwork() {
 				modem1.ModuleInit(true)
 				return modem1.Start4GNetwork()
 			}
-		case EC200U:
+		case EC200U: // 移远4G调制解调器
 			if usb0CableOK, _ := modem2.Is4GCableConnected(); usb0CableOK {
 				if modem2.Start4GNetwork() {
 					return true
@@ -276,7 +279,7 @@ func openNetwork() {
 	}
 
 	curNetType = NetNone
-	baseapp.Logger.Warnf("[%s] 没有可用的网络连接!", MODULE_NAME)
+	baseapp.Logger.Warnf("[%s] ⚠️ 当前无可用的网络", MODULE_NAME)
 }
 
 // 得到当前联网类型: 有线、蜂窝

+ 9 - 6
netmgrd/ping.go

@@ -20,15 +20,18 @@ const (
 )
 
 func test1() bool {
-	_, err := net.LookupHost(TEST_URL1)
-	return err == nil
+	ctx, cancel := context.WithTimeout(context.Background(), TEST_TIMEOUT)
+	defer cancel()
+
+	addrs, err := net.DefaultResolver.LookupHost(ctx, TEST_URL1)
+	return err == nil && len(addrs) > 0
 }
 
 func test2() bool {
 	ctx, cancel := context.WithTimeout(context.Background(), TEST_TIMEOUT)
 	defer cancel()
 
-	cmd := exec.CommandContext(ctx, "ping", "-c", "3", TEST_HOST)
+	cmd := exec.CommandContext(ctx, "ping", "-c", "3", "-W", "3", TEST_HOST)
 
 	out, err := cmd.CombinedOutput()
 	if err != nil {
@@ -47,7 +50,7 @@ func test3() bool {
 	return true
 }
 
-func test4() bool {
+func test4() bool { // HTTP访问测试(不跟随重定向)
 	client := http.Client{
 		Timeout: TEST_TIMEOUT,
 		CheckRedirect: func(req *http.Request, via []*http.Request) error {
@@ -58,7 +61,7 @@ func test4() bool {
 	if err != nil {
 		return false
 	}
-	resp.Body.Close()
+	defer resp.Body.Close()
 	return true
 }
 
@@ -66,6 +69,6 @@ func CheckNetwork() (dnsOK, pingOK, tcpOK, httpOK bool) {
 	bOK1 := test1()
 	bOK3 := test3()
 	bOK4 := test4()
-	bOK2 := test2() || bOK3 || bOK4
+	bOK2 := bOK3 || bOK4 || test2()
 	return bOK1, bOK2, bOK3, bOK4
 }