Zero is invalid supposed to be "hey kernel, select one for me" interface index. This does not work for you, most probably because your routing table does not have explicit entries that match given multicast group, and default route goes over different interface.
Use if_nametoindex(3)
to resolve interface name and store it into ipv6mr_interface
member of struct ipv6_mreq
.