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 aix darwin dragonfly freebsd hurd netbsd openbsd solaris 6 7package net 8 9import ( 10 "runtime" 11 "syscall" 12) 13 14func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { 15 ip, err := interfaceToIPv4Addr(ifi) 16 if err != nil { 17 return wrapSyscallError("setsockopt", err) 18 } 19 var a [4]byte 20 copy(a[:], ip.To4()) 21 err = fd.pfd.SetsockoptInet4Addr(syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, a) 22 runtime.KeepAlive(fd) 23 return wrapSyscallError("setsockopt", err) 24} 25 26func setIPv4MulticastLoopback(fd *netFD, v bool) error { 27 err := fd.pfd.SetsockoptByte(syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, byte(boolint(v))) 28 runtime.KeepAlive(fd) 29 return wrapSyscallError("setsockopt", err) 30} 31