Example #1
0
// JoinMulticastIPv6 joins the multicast group address given by gaddr. laddr specifies which
// network interface to use when joining the group.
func JoinMulticastIPv6(c *net.IPConn, gaddr, laddr net.IP) error {
	f, err := c.File()
	if err != nil {
		return err
	}
	defer f.Close()

	mreq := &syscall.IPv6Mreq{}
	copy(mreq.Multiaddr[:], gaddr.To16())
	iface, err := findInterface(laddr)
	if err != nil {
		return err
	}
	mreq.Interface = uint32(iface.Index)

	err = syscall.SetsockoptIPv6Mreq(int(f.Fd()), syscall.IPPROTO_IPV6, syscall.IPV6_JOIN_GROUP, mreq)
	if err != nil {
		return err
	}
	return nil
}