]>
Commit | Line | Data |
---|---|---|
df1304ee ILT |
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 | // +build darwin freebsd netbsd openbsd | |
6 | ||
df1304ee ILT |
7 | package net |
8 | ||
9 | import ( | |
10 | "os" | |
11 | "syscall" | |
12 | ) | |
13 | ||
4ccad563 ILT |
14 | func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { |
15 | ip, err := interfaceToIPv4Addr(ifi) | |
df1304ee | 16 | if err != nil { |
4ccad563 | 17 | return os.NewSyscallError("setsockopt", err) |
df1304ee | 18 | } |
4ccad563 ILT |
19 | var a [4]byte |
20 | copy(a[:], ip.To4()) | |
cbb6491d ILT |
21 | if err := fd.incref(false); err != nil { |
22 | return err | |
23 | } | |
df1304ee | 24 | defer fd.decref() |
4ccad563 | 25 | err = syscall.SetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, a) |
df1304ee ILT |
26 | if err != nil { |
27 | return os.NewSyscallError("setsockopt", err) | |
28 | } | |
29 | return nil | |
30 | } | |
31 | ||
4ccad563 | 32 | func setIPv4MulticastLoopback(fd *netFD, v bool) error { |
cbb6491d ILT |
33 | if err := fd.incref(false); err != nil { |
34 | return err | |
35 | } | |
df1304ee | 36 | defer fd.decref() |
4ccad563 | 37 | err := syscall.SetsockoptByte(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, byte(boolint(v))) |
df1304ee ILT |
38 | if err != nil { |
39 | return os.NewSyscallError("setsockopt", err) | |
40 | } | |
41 | return nil | |
42 | } |