diff options
Diffstat (limited to 'libgo/go/net/sock_bsd.go')
-rw-r--r-- | libgo/go/net/sock_bsd.go | 37 |
1 files changed, 6 insertions, 31 deletions
diff --git a/libgo/go/net/sock_bsd.go b/libgo/go/net/sock_bsd.go index 2607b04..d993492 100644 --- a/libgo/go/net/sock_bsd.go +++ b/libgo/go/net/sock_bsd.go @@ -4,8 +4,6 @@ // +build darwin freebsd netbsd openbsd -// Sockets for BSD variants - package net import ( @@ -29,34 +27,11 @@ func maxListenerBacklog() int { if n == 0 || err != nil { return syscall.SOMAXCONN } - return int(n) -} - -func listenerSockaddr(s, f int, la syscall.Sockaddr, toAddr func(syscall.Sockaddr) Addr) (syscall.Sockaddr, error) { - a := toAddr(la) - if a == nil { - return la, nil - } - switch v := a.(type) { - case *TCPAddr, *UnixAddr: - err := setDefaultListenerSockopts(s) - if err != nil { - return nil, err - } - case *UDPAddr: - if v.IP.IsMulticast() { - err := setDefaultMulticastSockopts(s) - if err != nil { - return nil, err - } - switch f { - case syscall.AF_INET: - v.IP = IPv4zero - case syscall.AF_INET6: - v.IP = IPv6unspecified - } - return v.sockaddr(f) - } + // FreeBSD stores the backlog in a uint16, as does Linux. + // Assume the other BSDs do too. Truncate number to avoid wrapping. + // See issue 5030. + if n > 1<<16-1 { + n = 1<<16 - 1 } - return la, nil + return int(n) } |