-#if HAVE_STRUCT_GROUP_SOURCE_REQ && defined(MCAST_BLOCK_SOURCE) && !defined(_WIN32) && (!defined(TARGET_OS_TV) || !TARGET_OS_TV)
- /* These ones are available in the microsoft SDK, but don't seem to work
- * as on linux, so just prefer the v4-only approach there for now. */
- int i;
- for (i = 0; i < nb_sources; i++) {
- struct group_source_req mreqs;
- int level = addr->sa_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
- struct addrinfo *sourceaddr = udp_resolve_host(h, sources[i], 0,
- SOCK_DGRAM, AF_UNSPEC,
- 0);
- if (!sourceaddr)
- return AVERROR(ENOENT);
-
- mreqs.gsr_interface = 0;
- memcpy(&mreqs.gsr_group, addr, addr_len);
- memcpy(&mreqs.gsr_source, sourceaddr->ai_addr, sourceaddr->ai_addrlen);
- freeaddrinfo(sourceaddr);
-
- if (setsockopt(sockfd, level,
- include ? MCAST_JOIN_SOURCE_GROUP : MCAST_BLOCK_SOURCE,
- (const void *)&mreqs, sizeof(mreqs)) < 0) {
- if (include)
- ff_log_net_error(NULL, AV_LOG_ERROR, "setsockopt(MCAST_JOIN_SOURCE_GROUP)");
- else
- ff_log_net_error(NULL, AV_LOG_ERROR, "setsockopt(MCAST_BLOCK_SOURCE)");
- return ff_neterrno();
- }
- }
-#elif HAVE_STRUCT_IP_MREQ_SOURCE && defined(IP_BLOCK_SOURCE)