The branch, master has been updated
       via  4e9a184d5c948ce89fc7cd0954c9e1600e776db9 (commit)
      from  f62d8789116fef8d8cd7f20062b16ccd93f7ce23 (commit)


- Log -----------------------------------------------------------------
commit 4e9a184d5c948ce89fc7cd0954c9e1600e776db9
Author:     iddq <iddq>
AuthorDate: Sat Jul 26 14:00:56 2025 +0200
Commit:     Marton Balint <c...@passwd.hu>
CommitDate: Fri Aug 22 18:20:08 2025 +0000

    avformat/tcp: add option for enabling TCP keepalive

diff --git a/doc/protocols.texi b/doc/protocols.texi
index fa2df39a1d..6b582fde30 100644
--- a/doc/protocols.texi
+++ b/doc/protocols.texi
@@ -986,6 +986,11 @@ Set TCP_NODELAY to disable Nagle's algorithm. Default 
value is 0.
 
 @emph{Remark: Writing to the socket is currently not optimized to minimize 
system calls and reduces the efficiency / effect of TCP_NODELAY.}
 
+@item tcp_keepalive=@var{1|0}
+Enable the TCP keepalive mechanism to detect dead peers and help maintain 
long-lived idle connections. Default value is 0.
+
+Only the basic keepalive option (SO_KEEPALIVE) can be enabled or disabled. 
Platform-specific tuning parameters such as TCP_KEEPIDLE, TCP_KEEPINTVL, or 
TCP_KEEPCNT are not configurable and will use the operating system's default 
values.
+
 @end table
 
 For example to read with @command{ffplay} a multimedia resource named
diff --git a/libavformat/tcp.c b/libavformat/tcp.c
index 755e3af242..c286698d33 100644
--- a/libavformat/tcp.c
+++ b/libavformat/tcp.c
@@ -44,6 +44,7 @@ typedef struct TCPContext {
     int recv_buffer_size;
     int send_buffer_size;
     int tcp_nodelay;
+    int tcp_keepalive;
 #if !HAVE_WINSOCK2_H
     int tcp_mss;
 #endif /* !HAVE_WINSOCK2_H */
@@ -61,6 +62,7 @@ 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 },
+    { "tcp_keepalive", "Use TCP keepalive to detect dead connections and keep 
long-lived connections active.",           OFFSET(tcp_keepalive), 
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 */
@@ -125,6 +127,12 @@ static int customize_fd(void *ctx, int fd, int family)
             ff_log_net_error(ctx, AV_LOG_WARNING, "setsockopt(TCP_NODELAY)");
         }
     }
+    if (s->tcp_keepalive > 0) {
+        if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &s->tcp_keepalive, 
sizeof(s->tcp_keepalive))) {
+            ff_log_net_error(ctx, AV_LOG_WARNING, "setsockopt(SO_KEEPALIVE)");
+        }
+    }
+
 #if !HAVE_WINSOCK2_H
     if (s->tcp_mss > 0) {
         if (setsockopt (fd, IPPROTO_TCP, TCP_MAXSEG, &s->tcp_mss, sizeof 
(s->tcp_mss))) {
@@ -187,6 +195,9 @@ static int tcp_open(URLContext *h, const char *uri, int 
flags)
         if (av_find_info_tag(buf, sizeof(buf), "tcp_nodelay", p)) {
             s->tcp_nodelay = strtol(buf, NULL, 10);
         }
+        if (av_find_info_tag(buf, sizeof(buf), "tcp_keepalive", p)) {
+            s->tcp_keepalive = strtol(buf, NULL, 10);
+        }
     }
     if (s->rw_timeout >= 0) {
         s->open_timeout =

-----------------------------------------------------------------------

Summary of changes:
 doc/protocols.texi |  5 +++++
 libavformat/tcp.c  | 11 +++++++++++
 2 files changed, 16 insertions(+)


hooks/post-receive
-- 

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

To unsubscribe, visit link above, or email
ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to