Brad Fitzpatrick | 5194744 | 2016-03-01 22:57:46 +0000 | [diff] [blame] | 1 | // Copyright 2009 The Go Authors. All rights reserved. |
Mikio Hara | 6a6224c | 2014-03-13 14:45:50 +0900 | [diff] [blame] | 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 | |
Mikio Hara | 6a6224c | 2014-03-13 14:45:50 +0900 | [diff] [blame] | 13 | func setKeepAlivePeriod(fd *netFD, d time.Duration) error { |
| 14 | if err := fd.incref(); err != nil { |
| 15 | return err |
| 16 | } |
| 17 | defer fd.decref() |
Mikio Hara | f956740 | 2014-09-11 17:56:58 +0900 | [diff] [blame] | 18 | // The kernel expects milliseconds so round to next highest |
| 19 | // millisecond. |
Mikio Hara | 6a6224c | 2014-03-13 14:45:50 +0900 | [diff] [blame] | 20 | d += (time.Millisecond - time.Nanosecond) |
Mikio Hara | f956740 | 2014-09-11 17:56:58 +0900 | [diff] [blame] | 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) |
Mikio Hara | 6a6224c | 2014-03-13 14:45:50 +0900 | [diff] [blame] | 24 | } |
| 25 | return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, msecs)) |
| 26 | } |