//go:build linux || darwin || dragonfly || freebsd || netbsd || openbsd || solaris || illumos package pool import ( "errors" "io" "syscall" ) var errUnexpectedRead = errors.New("unexpected read from socket") func connCheck(sysConn syscall.Conn) error { rawConn, err := sysConn.SyscallConn() if err != nil { return err } var sysErr error if err := rawConn.Read(func(fd uintptr) bool { var buf [1]byte n, err := syscall.Read(int(fd), buf[:]) switch { case n == 0 && err == nil: sysErr = io.EOF case n > 0: sysErr = errUnexpectedRead case err == syscall.EAGAIN || err == syscall.EWOULDBLOCK: sysErr = nil default: sysErr = err } return true }); err != nil { return err } return sysErr }