func isENOBUFS(err error) bool {
return false // ENOBUFS is Unix-specific
}
+
+func isECONNRESET(err error) bool {
+ return false // ECONNRESET is Unix-specific
+}
+
+func isWSAECONNREFUSED(err error) bool {
+ return false // WSAECONNREFUSED is Windows-specific
+}
func isENOBUFS(err error) bool {
return errors.Is(err, syscall.ENOBUFS)
}
+
+func isECONNRESET(err error) bool {
+ return errors.Is(err, syscall.ECONNRESET)
+}
+
+func isWSAECONNREFUSED(err error) bool {
+ return false // WSAECONNREFUSED is Windows-specific
+}
// defined in the syscall package we may as well check for it.
return errors.Is(err, syscall.ENOBUFS)
}
+
+func isECONNRESET(err error) bool {
+ return errors.Is(err, syscall.ECONNRESET)
+}
+
+func isWSAECONNREFUSED(err error) bool {
+ const WSAECONNREFUSED = syscall.Errno(10061)
+ return errors.Is(err, WSAECONNREFUSED)
+}
"io"
"os"
"runtime"
- "strings"
"sync"
"testing"
"time"
}
}
- if strings.Contains(err.Error(), "connection reset by peer") && (testenv.Builder() == "" || runtime.GOOS == "freebsd") {
+ if isECONNRESET(err) && (testenv.Builder() == "" || runtime.GOOS == "freebsd") {
// After we set up the connection on Unix, we make a call to
// getsockopt to retrieve its status. Empirically, on some platforms
// (notably FreeBSD 13), we may see ECONNRESET from that call instead
t.Skipf("skipping due to ECONNRESET with full accept queue")
}
+ if isWSAECONNREFUSED(err) && (testenv.Builder() == "" || runtime.GOARCH == "arm64") {
+ // A similar situation seems to occur on windows/arm64, but returning
+ // WSAECONNREFUSED from ConnectEx instead of ECONNRESET from getsockopt.
+ t.Logf("Dial: %v", err)
+ t.Skipf("skipping due to WSAECONNREFUSED with full accept queue")
+ }
+
if d.Deadline.IsZero() || afterDial.Before(d.Deadline) {
delay := afterDial.Sub(beforeDial)
if delay < tt.timeout {