Test / test (push) Successful in 2m4s
Release / gates (push) Successful in 2m5s
Release / build (amd64, freebsd) (push) Successful in 1m27s
Release / build (amd64, linux) (push) Successful in 1m22s
Release / build (amd64, netbsd) (push) Successful in 1m19s
Release / build (amd64, openbsd) (push) Successful in 1m20s
Release / build (arm64, darwin) (push) Successful in 1m21s
Release / build (arm64, freebsd) (push) Successful in 1m26s
Release / build (arm64, linux) (push) Successful in 1m25s
Release / build (arm64, netbsd) (push) Successful in 1m31s
Release / build (arm64, openbsd) (push) Successful in 1m27s
Release / build (loong64, linux) (push) Successful in 1m37s
Release / build (riscv64, linux) (push) Successful in 1m21s
Release / release (push) Successful in 40s
Assisted-by: GLM 5.3 Flash
33 lines
881 B
Go
33 lines
881 B
Go
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package server
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
"testing"
|
|
)
|
|
|
|
// The transient accept errors are survivable; anything else is not.
|
|
func TestTransientAccept(t *testing.T) {
|
|
transient := []error{
|
|
os.NewSyscallError("accept", syscall.ECONNABORTED),
|
|
os.NewSyscallError("accept", syscall.EMFILE),
|
|
os.NewSyscallError("accept", syscall.ENFILE),
|
|
os.NewSyscallError("accept", syscall.EAGAIN),
|
|
os.NewSyscallError("accept", syscall.EINTR),
|
|
}
|
|
for _, err := range transient {
|
|
if !transientAccept(err) {
|
|
t.Fatalf("%v classified as fatal", err)
|
|
}
|
|
}
|
|
if transientAccept(os.NewSyscallError("accept", syscall.EACCES)) {
|
|
t.Fatal("EACCES classified as transient")
|
|
}
|
|
if transientAccept(os.ErrClosed) {
|
|
t.Fatal("a closed listener classified as transient")
|
|
}
|
|
}
|