[vlc-devel] [PATCH 1/2] access/rtp: define MSG_TRUNC on recv call if available.

Rémi Denis-Courmont remi at remlab.net
Sun Oct 14 11:16:23 CEST 2018


Le lauantaina 13. lokakuuta 2018, 21.04.43 EEST Ilkka Ollakka a écrit :
> Defining the MSG_TRUNC on msghrd does only tell if data is truncated,
> not what the actual data size was.
> 
> Tested the adjust of MTU by sending data to localhost via netcat:
> 
> cat ~/tmp/myfile.mp3|netcat -u 127.0.0.1 1234
> 
> and vlc -Idummy -vv rtp://@127.0.0.1:1234 --sout="#stat"
> 
> without this patch the rtp input constantly complains about trunced
> input and doesn't adjust the receiving amount.

I would add 'const', and maybe clarify the description because it took me some 
time to figure out what the problem and solution was here.

But looks OK.

> ---
>  modules/access/rtp/input.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/modules/access/rtp/input.c b/modules/access/rtp/input.c
> index f22f6655ab..be23e3b3e6 100644
> --- a/modules/access/rtp/input.c
> +++ b/modules/access/rtp/input.c
> @@ -109,6 +109,12 @@ void *rtp_dgram_thread (void *opaque)
>      demux_sys_t *sys = demux->p_sys;
>      vlc_tick_t deadline = VLC_TICK_INVALID;
>      int rtp_fd = sys->fd;
> +#ifdef __linux__
> +    int trunc_flag = MSG_TRUNC;
> +#else
> +    int trunc_flag = 0;
> +#endif
> +
>      struct iovec iov =
>      {
>          .iov_len = DEFAULT_MRU,
> @@ -149,17 +155,12 @@ void *rtp_dgram_thread (void *opaque)
>              }
> 
>              iov.iov_base = block->p_buffer;
> -#ifdef __linux__
> -            msg.msg_flags = MSG_TRUNC;
> -#else
> -            msg.msg_flags = 0;
> -#endif
> +            msg.msg_flags = trunc_flag;
> 
> -            ssize_t len = recvmsg (rtp_fd, &msg, 0);
> +            ssize_t len = recvmsg (rtp_fd, &msg, trunc_flag);
>              if (len != -1)
>              {
> -#ifdef MSG_TRUNC
> -                if (msg.msg_flags & MSG_TRUNC)
> +                if (msg.msg_flags & trunc_flag )
>                  {
>                      msg_Err(demux, "%zd bytes packet truncated (MRU was
> %zu)", len, iov.iov_len);
> @@ -167,7 +168,6 @@ void *rtp_dgram_thread (void *opaque)
>                      iov.iov_len = len;
>                  }
>                  else
> -#endif
>                      block->i_buffer = len;
> 
>                  rtp_process (demux, block);


-- 
Rémi Denis-Courmont
http://www.remlab.net/





More information about the vlc-devel mailing list