Files
conduit/internal/netutil/conn.go
2025-10-10 10:05:28 +02:00

38 lines
712 B
Go

package netutil
import (
"errors"
"io"
"net"
"syscall"
"git.maze.io/maze/conduit/logger"
)
type ConnCloser struct {
net.Conn
Closer func() error
}
func (c *ConnCloser) Close() error {
if c.Closer == nil {
return c.Conn.Close()
}
return c.Closer()
}
// IsClosing checks if the error is because the connection was closed.
func IsClosing(err error) bool {
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrClosedPipe) || errors.Is(err, syscall.ECONNRESET) {
return true
}
if err, ok := err.(net.Error); ok && err.Timeout() {
return true
}
if err, ok := err.(*net.OpError); ok && err.Op == "close" {
return true
}
logger.Debugf("not a closing error %T: %#+v", err, err)
return false
}