Opened 3 years ago
Closed 3 years ago
#9449 closed defect (fixed)
FFmpeg UDP multicast support broken on OpenBSD
Reported by: | Brad Smith | Owned by: | |
---|---|---|---|
Priority: | important | Component: | avformat |
Version: | git-master | Keywords: | udp multicast |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
The FFmpeg UDP multicast support is broken on OpenBSD.
$ ffmpeg -i https://ftp.openbsd.org/pub/OpenBSD/songs/song69.ogg \
"udp://239.255.0.1:9000?ttl=10"
(...)
setsockopt(IP_MULTICAST_TTL): Invalid argument
udp://239.255.0.1:9000?ttl=10: Invalid argument
The mcastTTL parameter should be of the type unsigned char not int when passed to IP_MULTICAST_TTL via setsockopt(). This appears to be the case with all of the UNIX OS's I can find (Linux, all of the BSD's, Solaris, AIX, IRIX, etc.)
static int udp_set_multicast_ttl(int sockfd, int mcastTTL, struct sockaddr *addr) { #ifdef IP_MULTICAST_TTL if (addr->sa_family == AF_INET) { if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &mcastTTL, sizeof(mcastTTL)) < 0) { ff_log_net_error(NULL, AV_LOG_ERROR, "setsockopt(IP_MULTICAST_TTL)"); return ff_neterrno(); } } #endif #if defined(IPPROTO_IPV6) && defined(IPV6_MULTICAST_HOPS) if (addr->sa_family == AF_INET6) { if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &mcastTTL, sizeof(mcastTTL)) < 0) { ff_log_net_error(NULL, AV_LOG_ERROR, "setsockopt(IPV6_MULTICAST_HOPS)"); return ff_neterrno(); } } #endif return 0; }
Change History (2)
comment:1 by , 3 years ago
comment:2 by , 3 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
This got fixed in 268d00bb87c544c6a89edf3b3f986ed4f639ce7a.
Note:
See TracTickets
for help on using tickets.
There was a diff that was suggested but I am not sure this is the way you want to go.