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.
13 const sysTCP_KEEPINTVL
= 0x101
15 func setKeepAlivePeriod(fd
*netFD
, d time
.Duration
) error
{
16 // The kernel expects seconds so round to next highest second.
17 d
+= (time
.Second
- time
.Nanosecond
)
18 secs
:= int(d
.Seconds())
19 switch err
:= fd
.pfd
.SetsockoptInt(syscall
.IPPROTO_TCP
, sysTCP_KEEPINTVL
, secs
); err
{
20 case nil, syscall
.ENOPROTOOPT
: // OS X 10.7 and earlier don't support this option
22 return wrapSyscallError("setsockopt", err
)
24 err
:= fd
.pfd
.SetsockoptInt(syscall
.IPPROTO_TCP
, syscall
.TCP_KEEPALIVE
, secs
)
26 return wrapSyscallError("setsockopt", err
)