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".

Reply via email to