|
123456789101112131415161718192021222324252627282930313233343536 |
- //+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)
- }
- }
|