Home | History | Annotate | Download | only in net
      1 // Copyright 2009 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package net
      6 
      7 import (
      8 	"os"
      9 	"syscall"
     10 	"time"
     11 )
     12 
     13 func setKeepAlivePeriod(fd *netFD, d time.Duration) error {
     14 	if err := fd.incref(); err != nil {
     15 		return err
     16 	}
     17 	defer fd.decref()
     18 	// The kernel expects milliseconds so round to next highest
     19 	// millisecond.
     20 	d += (time.Millisecond - time.Nanosecond)
     21 	msecs := int(d / time.Millisecond)
     22 	if err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, msecs); err != nil {
     23 		return os.NewSyscallError("setsockopt", err)
     24 	}
     25 	return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, msecs))
     26 }
     27