LEFT | RIGHT |
1 // Copyright 2012 The Go Authors. All rights reserved. | 1 // Copyright 2012 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 package ipv4 | 5 package ipv4 |
6 | 6 |
7 import ( | 7 import ( |
8 "net" | 8 "net" |
9 "os" | 9 "os" |
10 "syscall" | 10 "syscall" |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 } | 123 } |
124 return v == 1, nil | 124 return v == 1, nil |
125 } | 125 } |
126 | 126 |
127 func setIPv4MulticastLoopback(fd syscall.Handle, v bool) error { | 127 func setIPv4MulticastLoopback(fd syscall.Handle, v bool) error { |
128 vv := int32(boolint(v)) | 128 vv := int32(boolint(v)) |
129 return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProto
colIP, sysSockoptMulticastLoopback, (*byte)(unsafe.Pointer(&vv)), 4)) | 129 return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProto
colIP, sysSockoptMulticastLoopback, (*byte)(unsafe.Pointer(&vv)), 4)) |
130 } | 130 } |
131 | 131 |
132 func joinIPv4Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error { | 132 func joinIPv4Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error { |
133 » mreq := sysMulticastReq{IP: [4]byte{grp[0], grp[1], grp[2], grp[3]}} | 133 » mreq := syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]
}} |
134 » if err := mreq.setInterface(ifi); err != nil { | 134 » if err := setSysIPMreqInterface(&mreq, ifi); err != nil { |
135 return err | 135 return err |
136 } | 136 } |
137 » return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProto
colIP, sysSockoptJoinGroup, (*byte)(unsafe.Pointer(&mreq)), int32(sysSizeofMulti
castReq))) | 137 » return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProto
colIP, sysSockoptJoinGroup, (*byte)(unsafe.Pointer(&mreq)), int32(unsafe.Sizeof(
mreq)))) |
138 } | 138 } |
139 | 139 |
140 func leaveIPv4Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error { | 140 func leaveIPv4Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error { |
141 » mreq := sysMulticastReq{IP: [4]byte{grp[0], grp[1], grp[2], grp[3]}} | 141 » mreq := syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]
}} |
142 » if err := mreq.setInterface(ifi); err != nil { | 142 » if err := setSysIPMreqInterface(&mreq, ifi); err != nil { |
143 return err | 143 return err |
144 } | 144 } |
145 » return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProto
colIP, sysSockoptLeaveGroup, (*byte)(unsafe.Pointer(&mreq)), int32(sysSizeofMult
icastReq))) | 145 » return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProto
colIP, sysSockoptLeaveGroup, (*byte)(unsafe.Pointer(&mreq)), int32(unsafe.Sizeof
(mreq)))) |
146 } | 146 } |
LEFT | RIGHT |