summaryrefslogtreecommitdiff
path: root/debian/patches/src_libgo_go_net_sockopt_gnu.go.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/src_libgo_go_net_sockopt_gnu.go.diff')
-rw-r--r--debian/patches/src_libgo_go_net_sockopt_gnu.go.diff50
1 files changed, 50 insertions, 0 deletions
diff --git a/debian/patches/src_libgo_go_net_sockopt_gnu.go.diff b/debian/patches/src_libgo_go_net_sockopt_gnu.go.diff
new file mode 100644
index 0000000..43f1720
--- /dev/null
+++ b/debian/patches/src_libgo_go_net_sockopt_gnu.go.diff
@@ -0,0 +1,50 @@
+Index: gcc-6-6.2.1-4.1/src/libgo/go/net/sockopt_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-6-6.2.1-4.1/src/libgo/go/net/sockopt_gnu.go
+@@ -0,0 +1,45 @@
++// Copyright 2011 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.
++
++// +build gnu
++
++package net
++
++import (
++ "os"
++ "syscall"
++)
++
++func setDefaultSockopts(s, family, sotype int, ipv6only bool) error {
++ if family == syscall.AF_INET6 && sotype != syscall.SOCK_RAW {
++ // Allow both IP versions even if the OS default
++ // is otherwise. Note that some operating systems
++ // never admit this option.
++ syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, boolint(ipv6only))
++ }
++ // Allow broadcast.
++ return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1))
++}
++
++func setDefaultListenerSockopts(s int) error {
++ // Allow reuse of recently-used addresses.
++ return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1))
++}
++
++func setDefaultMulticastSockopts(s int) error {
++ // Allow multicast UDP and raw IP datagram sockets to listen
++ // concurrently across multiple listeners.
++ if err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil {
++ return os.NewSyscallError("setsockopt", err)
++ }
++ // Allow reuse of recently-used ports.
++ // This option is supported only in descendants of 4.4BSD,
++ // to make an effective multicast application that requires
++ // quick draw possible.
++ // Not supported on GNU/Hurd
++ //if syscall.SO_REUSEPORT != 0 {
++ // return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1))
++ //}
++ return nil
++}