transfer.sh/vendor/github.com/google/martian/nosigpipe/nosigpipe_darwin.go
2019-03-17 20:19:56 +01:00

36 lines
732 B
Go

//+build darwin,go1.9
package nosigpipe
import (
"net"
"syscall"
"github.com/google/martian/log"
)
// IgnoreSIGPIPE prevents SIGPIPE from being raised on TCP sockets when remote hangs up
// See: https://github.com/golang/go/issues/17393
func IgnoreSIGPIPE(c net.Conn) {
if c == nil {
return
}
s, ok := c.(syscall.Conn)
if !ok {
return
}
r, e := s.SyscallConn()
if e != nil {
log.Errorf("Failed to get SyscallConn: %s", e)
return
}
e = r.Control(func(fd uintptr) {
intfd := int(fd)
if e := syscall.SetsockoptInt(intfd, syscall.SOL_SOCKET, syscall.SO_NOSIGPIPE, 1); e != nil {
log.Errorf("Failed to set SO_NOSIGPIPE: %s", e)
}
})
if e != nil {
log.Errorf("Failed to set SO_NOSIGPIPE: %s", e)
}
}