github.com/cristalhq/netx@v0.0.0-20221116164110-442313ef3309/listener_darwin.go (about)

     1  //go:build darwin
     2  
     3  package netx
     4  
     5  import "syscall"
     6  
     7  func newSocketCloexec(domain, typ, proto int) (int, error) {
     8  	return newSocketCloexecDefault(domain, typ, proto)
     9  }
    10  
    11  func setKeepAlive(fd, secs int) error {
    12  	if err := newError("setsockopt", syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1)); err != nil {
    13  		return err
    14  	}
    15  
    16  	err := newError("setsockopt", syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, secs))
    17  	switch err {
    18  	case nil, syscall.ENOPROTOOPT: // OS X 10.7 and earlier don't support this option
    19  		return newError("setsockopt", syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPALIVE, secs))
    20  	default:
    21  		return err
    22  	}
    23  }