// 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 }