This patch to libgo ensures that syscall.SO_REUSEPORT is defined. It fixes the only use of it in the standard library to check whether it has a valid value before using it. This should fix the build on Solaris 9. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline and 4.7 branch.
Ian
diff -r 5d6c324d2a05 libgo/go/net/sockopt_bsd.go --- a/libgo/go/net/sockopt_bsd.go Tue Apr 24 21:39:30 2012 -0700 +++ b/libgo/go/net/sockopt_bsd.go Wed Apr 25 21:24:58 2012 -0700 @@ -53,9 +53,11 @@ // This option is supported only in descendants of 4.4BSD, // to make an effective multicast application that requires // quick draw possible. - err = syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1) - if err != nil { - return os.NewSyscallError("setsockopt", err) + if syscall.SO_REUSEPORT != 0 { + err = syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1) + if err != nil { + return os.NewSyscallError("setsockopt", err) + } } return nil } diff -r 5d6c324d2a05 libgo/mksysinfo.sh --- a/libgo/mksysinfo.sh Tue Apr 24 21:39:30 2012 -0700 +++ b/libgo/mksysinfo.sh Wed Apr 25 21:24:58 2012 -0700 @@ -264,7 +264,7 @@ sed -e 's/^\(const \)_\(SHUT[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} # The net package requires some const definitions. -for m in IP_PKTINFO IPV6_V6ONLY IPPROTO_IPV6 IPV6_JOIN_GROUP IPV6_LEAVE_GROUP IPV6_TCLASS; do +for m in IP_PKTINFO IPV6_V6ONLY IPPROTO_IPV6 IPV6_JOIN_GROUP IPV6_LEAVE_GROUP IPV6_TCLASS SO_REUSEPORT; do if ! grep "^const $m " ${OUT} >/dev/null 2>&1; then echo "const $m = 0" >> ${OUT} fi