Initial import
This commit is contained in:
37
internal/netutil/conn.go
Normal file
37
internal/netutil/conn.go
Normal file
@@ -0,0 +1,37 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user