On Tue, Nov 12, 2013 at 7:16 AM, Rainer Orth <r...@cebitec.uni-bielefeld.de> wrote: > Ian Lance Taylor <i...@google.com> writes: > >> On Tue, Nov 12, 2013 at 6:43 AM, Rainer Orth >> <r...@cebitec.uni-bielefeld.de> wrote: >>> >>> works on Solaris 11, but not on Solaris 9 and 10 which lack >>> TCP_KEEPALIVE_THRESHOLD. >> >> Do they have any facility for changing the keepalive timers? > > There's TCP_KEEPALIVE which is already used in tcpsockopt_darwin.go.
OK, great. This patch changes the Solaris code to use the existing Darwin code. Bootstrapped on x86_64-unknown-linux-gnu, not that that proves much. Committed to mainline. Ian
diff -r bfe1d96993b8 libgo/Makefile.am --- a/libgo/Makefile.am Thu Nov 14 12:13:29 2013 -0800 +++ b/libgo/Makefile.am Thu Nov 14 12:16:15 2013 -0800 @@ -752,7 +752,7 @@ go_net_tcpsockopt_file = go/net/tcpsockopt_darwin.go else if LIBGO_IS_SOLARIS -go_net_tcpsockopt_file = go/net/tcpsockopt_solaris.go +go_net_tcpsockopt_file = go/net/tcpsockopt_darwin.go else go_net_tcpsockopt_file = go/net/tcpsockopt_unix.go endif diff -r bfe1d96993b8 libgo/go/net/tcpsockopt_solaris.go --- a/libgo/go/net/tcpsockopt_solaris.go Thu Nov 14 12:13:29 2013 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -// 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(d.Nanoseconds() / time.Millisecond) - - return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_TCP, syscall.TCP_KEEPALIVE_THRESHOLD, msecs)) -}