OSDN Git Service

libgo: Update to weekly.2012-02-07.
[pf3gnuchains/gcc-fork.git] / libgo / go / net / sockopt_linux.go
index 9dbb4e5..67c1dc8 100644 (file)
@@ -7,31 +7,43 @@
 package net
 
 import (
+       "os"
        "syscall"
 )
 
-func setDefaultSockopts(s, f, t int) {
+func setDefaultSockopts(s, f, t int) error {
        switch f {
        case syscall.AF_INET6:
                // 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, 0)
        }
 
        if f == syscall.AF_UNIX ||
                (f == syscall.AF_INET || f == syscall.AF_INET6) && t == syscall.SOCK_STREAM {
                // Allow reuse of recently-used addresses.
-               syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
+               err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
+               if err != nil {
+                       return os.NewSyscallError("setsockopt", err)
+               }
+
        }
 
        // Allow broadcast.
-       syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1)
+       err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1)
+       if err != nil {
+               return os.NewSyscallError("setsockopt", err)
+       }
 
+       return nil
 }
 
-func setDefaultMulticastSockopts(fd *netFD) {
-       fd.incref()
-       defer fd.decref()
+func setDefaultMulticastSockopts(s int) error {
        // Allow multicast UDP and raw IP datagram sockets to listen
        // concurrently across multiple listeners.
-       syscall.SetsockoptInt(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
+       err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
+       if err != nil {
+               return os.NewSyscallError("setsockopt", err)
+       }
+       return nil
 }