On Fri, Nov 8, 2013 at 4:01 AM, Rainer Orth <r...@cebitec.uni-bielefeld.de> 
wrote:
> The recent Go patch (couldn't find the submission on gcc-patches) broke
> Solaris bootstrap: on Solaris 10/x86 I get
>
> /vol/gcc/src/hg/trunk/local/libgo/go/net/tcpsockopt_unix.go:26:103: error: 
> reference to undefined identifier 'syscall.TCP_KEEPINTVL'
>   err := os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, 
> syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, secs))
>                                                                               
>                          ^
> /vol/gcc/src/hg/trunk/local/libgo/go/net/tcpsockopt_unix.go:30:103: error: 
> reference to undefined identifier 'syscall.TCP_KEEPIDLE'
>   return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, 
> syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, secs))
>                                                                               
>                          ^

I think this will be fixed by the appended patch.  Bootstrapped and
tested on x86_64-unknown-linux-gnu, not that that proves anything.
Committed to mainline.

Ian
diff -r 47a9c8a497d5 libgo/Makefile.am
--- a/libgo/Makefile.am	Mon Nov 11 13:20:11 2013 -0800
+++ b/libgo/Makefile.am	Mon Nov 11 13:23:07 2013 -0800
@@ -770,9 +770,13 @@
 if LIBGO_IS_DARWIN
 go_net_tcpsockopt_file = go/net/tcpsockopt_darwin.go
 else
+if LIBGO_IS_SOLARIS
+go_net_tcpsockopt_file = go/net/tcpsockopt_solaris.go
+else
 go_net_tcpsockopt_file =  go/net/tcpsockopt_unix.go
 endif
 endif
+endif
 
 go_net_files = \
 	go/net/cgo_unix.go \
diff -r 47a9c8a497d5 libgo/go/net/tcpsockopt_solaris.go
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgo/go/net/tcpsockopt_solaris.go	Mon Nov 11 13:23:07 2013 -0800
@@ -0,0 +1,25 @@
+// 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))
+}

Reply via email to