Imported Upstream version 4.7.2
[platform/upstream/gcc48.git] / libgo / go / net / sockoptip_windows.go
1 // Copyright 2011 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.
4
5 // IP-level socket options for Windows
6
7 package net
8
9 import (
10         "os"
11         "syscall"
12 )
13
14 func ipv4MulticastInterface(fd *netFD) (*Interface, error) {
15         // TODO: Implement this
16         return nil, syscall.EWINDOWS
17 }
18
19 func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
20         ip, err := interfaceToIPv4Addr(ifi)
21         if err != nil {
22                 return os.NewSyscallError("setsockopt", err)
23         }
24         var x [4]byte
25         copy(x[:], ip.To4())
26         if err := fd.incref(false); err != nil {
27                 return err
28         }
29         defer fd.decref()
30         err = syscall.SetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, x)
31         if err != nil {
32                 return os.NewSyscallError("setsockopt", err)
33         }
34         return nil
35 }
36
37 func ipv4MulticastTTL(fd *netFD) (int, error) {
38         // TODO: Implement this
39         return -1, syscall.EWINDOWS
40 }
41
42 func setIPv4MulticastTTL(fd *netFD, v int) error {
43         if err := fd.incref(false); err != nil {
44                 return err
45         }
46         defer fd.decref()
47         err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL, v)
48         if err != nil {
49                 return os.NewSyscallError("setsockopt", err)
50         }
51         return nil
52
53 }
54
55 func ipv4MulticastLoopback(fd *netFD) (bool, error) {
56         // TODO: Implement this
57         return false, syscall.EWINDOWS
58 }
59
60 func setIPv4MulticastLoopback(fd *netFD, v bool) error {
61         if err := fd.incref(false); err != nil {
62                 return err
63         }
64         defer fd.decref()
65         err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, boolint(v))
66         if err != nil {
67                 return os.NewSyscallError("setsockopt", err)
68         }
69         return nil
70
71 }
72
73 func ipv4ReceiveInterface(fd *netFD) (bool, error) {
74         // TODO: Implement this
75         return false, syscall.EWINDOWS
76 }
77
78 func setIPv4ReceiveInterface(fd *netFD, v bool) error {
79         // TODO: Implement this
80         return syscall.EWINDOWS
81 }
82
83 func ipv6TrafficClass(fd *netFD) (int, error) {
84         // TODO: Implement this
85         return 0, syscall.EWINDOWS
86 }
87
88 func setIPv6TrafficClass(fd *netFD, v int) error {
89         // TODO: Implement this
90         return syscall.EWINDOWS
91 }