]> Cypherpunks repositories - gostls13.git/commitdiff
net: fix TCP keepalive on dragonfly
authorMikio Hara <mikioh.mikioh@gmail.com>
Thu, 13 Mar 2014 05:45:50 +0000 (14:45 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Thu, 13 Mar 2014 05:45:50 +0000 (14:45 +0900)
Fixes #7528.

LGTM=jsing
R=jsing
CC=golang-codereviews
https://golang.org/cl/75140045

src/pkg/net/tcpsockopt_dragonfly.go [new file with mode: 0644]
src/pkg/net/tcpsockopt_unix.go

diff --git a/src/pkg/net/tcpsockopt_dragonfly.go b/src/pkg/net/tcpsockopt_dragonfly.go
new file mode 100644 (file)
index 0000000..d10a777
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2009 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package net
+
+import (
+       "os"
+       "syscall"
+       "time"
+)
+
+// Set keep alive period.
+func setKeepAlivePeriod(fd *netFD, d time.Duration) error {
+       if err := fd.incref(); err != nil {
+               return err
+       }
+       defer fd.decref()
+
+       // The kernel expects milliseconds so round to next highest millisecond.
+       d += (time.Millisecond - time.Nanosecond)
+       msecs := int(time.Duration(d.Nanoseconds()) / time.Millisecond)
+
+       err := os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, msecs))
+       if err != nil {
+               return err
+       }
+       return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, msecs))
+}
index 15d4fd9651960dfd1173ce5b9c9052751cd06730..2693a541d209fa14af05ee4d4389b7299d7509de 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build dragonfly freebsd linux nacl netbsd
+// +build freebsd linux nacl netbsd
 
 package net