mirror of
https://github.com/mjl-/mox.git
synced 2024-12-26 08:23:48 +03:00
25 lines
713 B
Go
25 lines
713 B
Go
|
package moxio
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"net"
|
||
|
"syscall"
|
||
|
)
|
||
|
|
||
|
// In separate file because of import of syscall.
|
||
|
|
||
|
// IsClosed returns whether i/o failed, typically because the connection is closed
|
||
|
// or otherwise cannot be used for further i/o.
|
||
|
//
|
||
|
// Used to prevent error logging for connections that are closed.
|
||
|
func IsClosed(err error) bool {
|
||
|
return errors.Is(err, net.ErrClosed) || errors.Is(err, syscall.EPIPE) || errors.Is(err, syscall.ECONNRESET) || isRemoteTLSError(err)
|
||
|
}
|
||
|
|
||
|
// A remote TLS client can send a message indicating failure, this makes it back to
|
||
|
// us as a write error.
|
||
|
func isRemoteTLSError(err error) bool {
|
||
|
var netErr *net.OpError
|
||
|
return errors.As(err, &netErr) && netErr.Op == "remote error"
|
||
|
}
|