]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgo/go/net/sockoptip_bsd.go
libgo: Update to current sources.
[thirdparty/gcc.git] / libgo / go / net / sockoptip_bsd.go
CommitLineData
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
7package net
8
9import (
10 "os"
11 "syscall"
12)
13
4ccad563
ILT
14func 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 32func 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}