[FFmpeg-cvslog] lavf/tcp: add option to setting Maximum Segment Size

Jun Zhao git at videolan.org
Thu Jul 26 16:37:30 EEST 2018


ffmpeg | branch: master | Jun Zhao <mypopydev at gmail.com> | Sun May  6 22:56:01 2018 +0800| [790cf9518a37ae7d2fb65d9d52111fc4ac4b7df0] | committer: Jun Zhao

lavf/tcp: add option to setting Maximum Segment Size

This can change the the MSS value announced to the other end in
the initial TCP packet, it's can be used when failed Path MTU
discovery.

Signed-off-by: Jun Zhao <mypopydev at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=790cf9518a37ae7d2fb65d9d52111fc4ac4b7df0
---

 libavformat/tcp.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/libavformat/tcp.c b/libavformat/tcp.c
index b0289f854f..499e365b78 100644
--- a/libavformat/tcp.c
+++ b/libavformat/tcp.c
@@ -42,6 +42,9 @@ typedef struct TCPContext {
     int recv_buffer_size;
     int send_buffer_size;
     int tcp_nodelay;
+#if !HAVE_WINSOCK2_H
+    int tcp_mss;
+#endif /* !HAVE_WINSOCK2_H */
 } TCPContext;
 
 #define OFFSET(x) offsetof(TCPContext, x)
@@ -54,6 +57,9 @@ static const AVOption options[] = {
     { "send_buffer_size", "Socket send buffer size (in bytes)",                OFFSET(send_buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E },
     { "recv_buffer_size", "Socket receive buffer size (in bytes)",             OFFSET(recv_buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E },
     { "tcp_nodelay", "Use TCP_NODELAY to disable nagle's algorithm",           OFFSET(tcp_nodelay), AV_OPT_TYPE_BOOL, { .i64 = 0 },             0, 1, .flags = D|E },
+#if !HAVE_WINSOCK2_H
+    { "tcp_mss",     "Maximum segment size for outgoing TCP packets",          OFFSET(tcp_mss),     AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E },
+#endif /* !HAVE_WINSOCK2_H */
     { NULL }
 };
 
@@ -153,6 +159,11 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
     if (s->tcp_nodelay > 0) {
         setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &s->tcp_nodelay, sizeof (s->tcp_nodelay));
     }
+#if !HAVE_WINSOCK2_H
+    if (s->tcp_mss > 0) {
+        setsockopt (fd, IPPROTO_TCP, TCP_MAXSEG, &s->tcp_mss, sizeof (s->tcp_mss));
+    }
+#endif /* !HAVE_WINSOCK2_H */
 
     if (s->listen == 2) {
         // multi-client



More information about the ffmpeg-cvslog mailing list