From 1e1c5a4dc8095370213a839122f375ab3c7af3d4 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 4 Jul 2024 21:27:20 +0700 Subject: [PATCH] internal/clientinfo: tighten condition to stop probing mdns If we see permission denied error when probing dns, that mean the current ctrld process won't be able to do that anyway. So the probing loop must be terminated to prevent waste of resources, or false positive from system firewall because of too many failed attempts. --- internal/clientinfo/mdns.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/clientinfo/mdns.go b/internal/clientinfo/mdns.go index 3fb004e..3b539e9 100644 --- a/internal/clientinfo/mdns.go +++ b/internal/clientinfo/mdns.go @@ -122,8 +122,8 @@ func (m *mdns) probeLoop(conns []*net.UDPConn, remoteAddr net.Addr, quitCh chan bo := backoff.NewBackoff("mdns probe", func(format string, args ...any) {}, time.Second*30) for { err := m.probe(conns, remoteAddr) - if isErrNetUnreachableOrInvalid(err) { - ctrld.ProxyLogger.Load().Warn().Msgf("stop probing %q: network unreachable or invalid", remoteAddr) + if shouldStopProbing(err) { + ctrld.ProxyLogger.Load().Warn().Msgf("stop probing %q: %v", remoteAddr, err) break } if err != nil { @@ -273,10 +273,14 @@ func multicastInterfaces() ([]net.Interface, error) { return interfaces, nil } -func isErrNetUnreachableOrInvalid(err error) bool { +// shouldStopProbing reports whether ctrld should stop probing mdns. +func shouldStopProbing(err error) bool { var se *os.SyscallError if errors.As(err, &se) { - return se.Err == syscall.ENETUNREACH || se.Err == syscall.EINVAL + switch se.Err { + case syscall.ENETUNREACH, syscall.EINVAL, syscall.EPERM: + return true + } } return false }