diff --git a/internal/server/socket.go b/internal/server/socket.go new file mode 100644 index 0000000000000000000000000000000000000000..88cee66e6b3742d33ced61048c13305ad07fc277 --- /dev/null +++ b/internal/server/socket.go @@ -0,0 +1,24 @@ +//go:build !windows + +package server + +import ( + "errors" + "io/fs" + "net" + "syscall" +) + +// isStaleSocketErr reports whether err indicates a Unix-domain socket file +// exists on disk but no process is listening on it (a stale or orphaned +// socket). It returns false for nil and for timeout errors. +func isStaleSocketErr(err error) bool { + if err == nil { + return false + } + var netErr net.Error + if errors.As(err, &netErr) && netErr.Timeout() { + return false + } + return errors.Is(err, syscall.ECONNREFUSED) || errors.Is(err, fs.ErrNotExist) +}