On Tue, Jan 25, 2022 at 04:28:33PM -0800, Chad Fraleigh wrote: > Since apparently linux will auto-detect (as mentioned by Marton Balint), > based on the optlen parameter, just using unsigned char in all cases seems to > be the cleanest. However, I would advise including a comment in the code to > that effect which says to ignore the [outdated] linux documentation (so > someone doesn't needlessly "correct" it in the future). >
I agree with, use unsigned char is preferable for all system I think. > I looked at the kernel source and it does work both ways: > > static int do_ip_setsockopt(struct sock *sk, int level, int optname, > sockptr_t optval, unsigned int optlen) > { > ... > switch (optname) { > ... > case IP_MULTICAST_TTL: > ... > if (optlen >= sizeof(int)) { > if (copy_from_sockptr(&val, optval, sizeof(val))) > return -EFAULT; > } else if (optlen >= sizeof(char)) { > unsigned char ucval; > > if (copy_from_sockptr(&ucval, optval, sizeof(ucval))) > return -EFAULT; > val = (int) ucval; > } > } > ... > } > > This check has been in the kernel since at least 2.6.12-rc2 (from Apr 2005). > It should work fine, unless newer ffmpeg builds support is needed on older > systems. So the only question is how old are the kernels in IoT and android > devices which might use the current ffmpeg? > > > On 1/24/2022 11:25 PM, lance.lmw...@gmail.com wrote: > > On Wed, Jan 12, 2022 at 12:13:13AM -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. > >> > >> > >> diff --git a/libavformat/udp.c b/libavformat/udp.c > >> index 180d96a988..29aa865fff 100644 > >> --- a/libavformat/udp.c > >> +++ b/libavformat/udp.c > >> @@ -163,7 +163,13 @@ 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) { > >> +#ifdef __linux__ > >> + int ttl = mcastTTL; > >> +#else > >> + unsigned char ttl = mcastTTL; > >> +#endif > > > > > > I don't have BSD system for test, but I prefer to use socklen_t, please try > > with my proposal patch: > > > > --- > > libavformat/udp.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/libavformat/udp.c b/libavformat/udp.c > > index 83c042d079..b9baa0a803 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) { > > + socklen_t ttl = mcastTTL; > > + > > + 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(); > > > > > >> + > >> + if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, > >> sizeof(ttl)) < 0) { > >> ff_log_net_error(NULL, 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".