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

     1  //go:build dragonfly || linux || freebsd || netbsd
     2  
     3  package netx
     4  
     5  import "syscall"
     6  
     7  func setKeepAlive(fd, secs int) error {
     8  	if err := newError("setsockopt", syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1)); err != nil {
     9  		return err
    10  	}
    11  	if err := newError("setsockopt", syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, secs)); err != nil {
    12  		return err
    13  	}
    14  	if err := newError("setsockopt", syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPCNT, 1)); err != nil {
    15  		return err
    16  	}
    17  	return newError("setsockopt", syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, secs))
    18  }