On Thu, Jan 27, 2022 at 10:30:10AM +0800, "zhilizhao(赵志立)" wrote: > > > > 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.
Yes, MacOS isn't caused by one byte or int. By #Ticket9449, it'll failed for ttl=10, so I guess my proposal which try with one byte again should be work for Openbsd system. But you can't limit to 255 only as some system support for int like Win32. > > > > > > #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". -- 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".