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.
This commit is contained in:
Cuong Manh Le
2023-08-02 10:47:07 +07:00
committed by Cuong Manh Le
parent 8496adc638
commit d3d2ed539f
+14 -3
View File
@@ -313,17 +313,25 @@ func runLogServer(sockPath string) net.Conn {
func errAddrInUse(err error) bool { func errAddrInUse(err error) bool {
var opErr *net.OpError var opErr *net.OpError
if errors.As(err, &opErr) { 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 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 { func errUrlConnRefused(err error) bool {
var urlErr *url.Error var urlErr *url.Error
if errors.As(err, &urlErr) { if errors.As(err, &urlErr) {
var opErr *net.OpError var opErr *net.OpError
if errors.As(urlErr.Err, &opErr) { 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 return false
@@ -340,7 +348,10 @@ func errUrlNetworkError(err error) bool {
switch { switch {
case errors.Is(opErr.Err, syscall.ECONNREFUSED), case errors.Is(opErr.Err, syscall.ECONNREFUSED),
errors.Is(opErr.Err, syscall.EINVAL), 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 return true
} }
} }