From 8d285f70fb617b19182229fda8a3de8c9c62a2eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Mon, 26 Feb 2024 13:20:38 +0800 Subject: [PATCH] Fix darwin monitor --- monitor_darwin.go | 13 ++++++++++--- monitor_shared.go | 7 ++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/monitor_darwin.go b/monitor_darwin.go index 938bb14..032f329 100644 --- a/monitor_darwin.go +++ b/monitor_darwin.go @@ -170,6 +170,8 @@ func getDefaultInterfaceBySocket() (*net.Interface, error) { Port: 80, }) result := make(chan netip.Addr, 1) + done := make(chan struct{}) + defer close(done) go func() { for { sockname, sockErr := unix.Getsockname(socketFd) @@ -182,8 +184,13 @@ func getDefaultInterfaceBySocket() (*net.Interface, error) { } addr := netip.AddrFrom4(sockaddr.Addr) if addr.IsUnspecified() { - time.Sleep(time.Millisecond) - continue + select { + case <-done: + break + default: + time.Sleep(10 * time.Millisecond) + continue + } } result <- addr break @@ -193,7 +200,7 @@ func getDefaultInterfaceBySocket() (*net.Interface, error) { select { case selectedAddr = <-result: case <-time.After(time.Second): - return nil, os.ErrDeadlineExceeded + return nil, nil } interfaces, err := net.Interfaces() if err != nil { diff --git a/monitor_shared.go b/monitor_shared.go index 0a99309..368059b 100644 --- a/monitor_shared.go +++ b/monitor_shared.go @@ -6,6 +6,7 @@ import ( "errors" "net" "net/netip" + "runtime" "sync" "time" @@ -71,7 +72,9 @@ func (m *defaultInterfaceMonitor) Start() error { } func (m *defaultInterfaceMonitor) delayCheckUpdate() { - time.Sleep(time.Second) + if runtime.GOOS == "android" { + time.Sleep(time.Second) + } err := m.updateInterfaces() if err != nil { m.logger.Error("update interfaces: ", err) @@ -81,6 +84,8 @@ func (m *defaultInterfaceMonitor) delayCheckUpdate() { m.defaultInterfaceName = "" m.defaultInterfaceIndex = -1 m.emit(EventNoRoute) + } else if err != nil { + m.logger.Error("check interface: ", err) } }