From d3d2ed539f4e5d550a82e8b225257d797d737f16 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 2 Aug 2023 10:47:07 +0700 Subject: [PATCH] cmd/ctrld: correct syscall.Errno for Windows On Windows, the syscall error numbers are different, so correct the value so we can detect right errors we want. --- cmd/ctrld/prog.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/cmd/ctrld/prog.go b/cmd/ctrld/prog.go index 530a7c2..6c16a13 100644 --- a/cmd/ctrld/prog.go +++ b/cmd/ctrld/prog.go @@ -313,17 +313,25 @@ func runLogServer(sockPath string) net.Conn { func errAddrInUse(err error) bool { var opErr *net.OpError if errors.As(err, &opErr) { - return errors.Is(opErr.Err, syscall.EADDRINUSE) + return errors.Is(opErr.Err, syscall.EADDRINUSE) || errors.Is(opErr.Err, windowsEADDRINUSE) } return false } +// https://learn.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 +var ( + windowsECONNREFUSED = syscall.Errno(10061) + windowsENETUNREACH = syscall.Errno(10051) + windowsEINVAL = syscall.Errno(10022) + windowsEADDRINUSE = syscall.Errno(10048) +) + func errUrlConnRefused(err error) bool { var urlErr *url.Error if errors.As(err, &urlErr) { var opErr *net.OpError if errors.As(urlErr.Err, &opErr) { - return errors.Is(opErr.Err, syscall.ECONNREFUSED) + return errors.Is(opErr.Err, syscall.ECONNREFUSED) || errors.Is(opErr.Err, windowsECONNREFUSED) } } return false @@ -340,7 +348,10 @@ func errUrlNetworkError(err error) bool { switch { case errors.Is(opErr.Err, syscall.ECONNREFUSED), errors.Is(opErr.Err, syscall.EINVAL), - errors.Is(opErr.Err, syscall.ENETUNREACH): + errors.Is(opErr.Err, syscall.ENETUNREACH), + errors.Is(opErr.Err, windowsENETUNREACH), + errors.Is(opErr.Err, windowsEINVAL), + errors.Is(opErr.Err, windowsECONNREFUSED): return true } }