[vlc-devel] [PATCH 1/2] access/rtp: define MSG_TRUNC on recv call if available.
Ilkka Ollakka
ileoo at videolan.org
Mon Oct 15 16:21:21 CEST 2018
recv() needs MSG_TRUNC flag so it will tell actual data-size if truncate
would happen additional to setting flag for it.
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.
---
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..32404a7331 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__
+ const int trunc_flag = MSG_TRUNC;
+#else
+ const 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);
--
2.19.0
More information about the vlc-devel
mailing list