38 lines
712 B
Go
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
|
|
}
|