2013-02-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
[official-gcc.git] / libgo / go / net / sock_windows.go
blobfc5d9e5de21e9edf3f14c209787904a2a0cd59d6
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 // Sockets for Windows
7 package net
9 import "syscall"
11 func maxListenerBacklog() int {
12 // TODO: Implement this
13 return syscall.SOMAXCONN
16 func listenerSockaddr(s syscall.Handle, f int, la syscall.Sockaddr, toAddr func(syscall.Sockaddr) Addr) (syscall.Sockaddr, error) {
17 a := toAddr(la)
18 if a == nil {
19 return la, nil
21 switch v := a.(type) {
22 case *TCPAddr, *UnixAddr:
23 err := setDefaultListenerSockopts(s)
24 if err != nil {
25 return nil, err
27 case *UDPAddr:
28 if v.IP.IsMulticast() {
29 err := setDefaultMulticastSockopts(s)
30 if err != nil {
31 return nil, err
33 switch f {
34 case syscall.AF_INET:
35 v.IP = IPv4zero
36 case syscall.AF_INET6:
37 v.IP = IPv6unspecified
39 return v.sockaddr(f)
42 return la, nil
45 func sysSocket(f, t, p int) (syscall.Handle, error) {
46 // See ../syscall/exec_unix.go for description of ForkLock.
47 syscall.ForkLock.RLock()
48 s, err := syscall.Socket(f, t, p)
49 if err == nil {
50 syscall.CloseOnExec(s)
52 syscall.ForkLock.RUnlock()
53 return s, err