Home | History | Annotate | Download | only in net
      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 dragonfly freebsd netbsd openbsd
      6 
      7 package net
      8 
      9 import (
     10 	"os"
     11 	"syscall"
     12 )
     13 
     14 func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
     15 	ip, err := interfaceToIPv4Addr(ifi)
     16 	if err != nil {
     17 		return os.NewSyscallError("setsockopt", err)
     18 	}
     19 	var a [4]byte
     20 	copy(a[:], ip.To4())
     21 	if err := fd.incref(); err != nil {
     22 		return err
     23 	}
     24 	defer fd.decref()
     25 	return os.NewSyscallError("setsockopt", syscall.SetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, a))
     26 }
     27 
     28 func setIPv4MulticastLoopback(fd *netFD, v bool) error {
     29 	if err := fd.incref(); err != nil {
     30 		return err
     31 	}
     32 	defer fd.decref()
     33 	return os.NewSyscallError("setsockopt", syscall.SetsockoptByte(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, byte(boolint(v))))
     34 }
     35