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")
|
||
|
|
}
|
||
|
|
}
|