> On Jan 27, 2022, at 9:59 AM, lance.lmw...@gmail.com wrote: > > On Wed, Jan 26, 2022 at 09:50:47PM +0100, Marton Balint wrote: >> >> >> On Wed, 26 Jan 2022, Brad Smith wrote: >> >>> On Wed, Jan 12, 2022 at 12:13:14AM -0500, Brad Smith wrote: >>>> Fix setsockopt() usage on OpenBSD with IP_MULTICAST_TTL. The field >>>> type should be an unsigned char on anything but Linux. >>> >>> Based on feedback so far. Here is a much simpler approach to this issue.. >> >> Win32 needs DWORD unfortunately. I missed it earlier, sorry. >> >> https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ip-socket-options > > From my testing on Mac system, it support one byte only, but at least, it'll > report "Invalid argument" only if the ttl > 255. Maybe we can try with one > byte > again if the errno is invalid like below. I tested it with ttl > 255 on Mac > system > and without "Invalid argument" anymore.
MacOS support int and unsigned char from my test. The upper bound of TTL is limited to 255 (limited by protocol design), I guess it’s unrelated to int or unsigned char. > > #ifdef IP_MULTICAST_TTL > + int ret = 0; > if (addr->sa_family == AF_INET) { > - if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &mcastTTL, > sizeof(mcastTTL)) < 0) { > + ret = setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &mcastTTL, > sizeof(mcastTTL)); > + /* try with byte also for IP_MULTICAST_TTL for some system like > OpenBSD */ > + if (ret < 0 && errno == EINVAL) { > + unsigned char ttl = mcastTTL; > + ff_log_net_error(logctx, AV_LOG_ERROR, > "setsockopt(IP_MULTICAST_TTL): "); > + ret = setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, > sizeof(ttl)); > + } > + if (ret < 0) { > ff_log_net_error(logctx, AV_LOG_ERROR, > "setsockopt(IP_MULTICAST_TTL)"); > return ff_neterrno(); > > >> >> Regards, >> Marton >> >>> >>> >>> diff --git a/libavformat/udp.c b/libavformat/udp.c >>> index 83c042d079..da1b98890b 100644 >>> --- a/libavformat/udp.c >>> +++ b/libavformat/udp.c >>> @@ -164,7 +164,9 @@ static int udp_set_multicast_ttl(int sockfd, int >>> mcastTTL, >>> { >>> #ifdef IP_MULTICAST_TTL >>> if (addr->sa_family == AF_INET) { >>> - if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &mcastTTL, >>> sizeof(mcastTTL)) < 0) { >>> + unsigned char ttl = mcastTTL; /* ignore the outdated Linux >>> documentation */ >>> + >>> + if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, >>> sizeof(ttl)) < 0) { >>> ff_log_net_error(logctx, AV_LOG_ERROR, >>> "setsockopt(IP_MULTICAST_TTL)"); >>> return ff_neterrno(); >>> } >>> _______________________________________________ >>> ffmpeg-devel mailing list >>> ffmpeg-devel@ffmpeg.org >>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>> >>> To unsubscribe, visit link above, or email >>> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". >>> >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > > -- > Thanks, > Limin Wang > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".