From patchwork Wed Nov 15 05:01:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 6079 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp4145573jah; Tue, 14 Nov 2017 21:02:04 -0800 (PST) X-Google-Smtp-Source: AGs4zMbjuTfp+v1L13VfZfJKlvyKifZenNgXLNTl+gA2qe+1RQ9zmKbtSN2kJr0IxGo6WK6i4Yy9 X-Received: by 10.28.236.79 with SMTP id k76mr10779514wmh.95.1510722124118; Tue, 14 Nov 2017 21:02:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510722124; cv=none; d=google.com; s=arc-20160816; b=OsceNDVJFjsMbmdT16V3sUxja70YMYv2XdhX04D9l3/dglZboUmDAyCmr0Mrf98IQJ vOAxWBGkRqEbHZjfxkcgAcCBCl9XTfhrxkXurrrtHRVoYfD7cY6nO8T2q0wOqglLI3Nw +OKaXGuX648XI5gi701dofftbK9r1dnZZiJ8bkW+T2pZtjuCOZAvgvZm+NqbzWeG0SiQ KHVl2jfD8uTb/SnI4FAzfyxP9oHWmo/3l9aJV3DpRUjyU1tTkeJkh2tX3lE/RDrtglHp 2MLESdRkBMuTCpsvR7FDsleAJYGl1K8M+OOF9YvQfle9W7UXFOybtd4EDZNSJEMWHHVh oCOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=Qnf9Z8onDb8vYAWOjgWqzuKeuacwDy/+jIVXr4kcDeE=; b=Ro9sZeYlsYYBJUPDdvDTcpLUp33QGaUldgZpxQ0mDocEz7z7ikkBqKVaSuVAqdmc/0 cB7ZspiIz72TWH/Ohw6zz1v2WcjKiLgGi48ALakIzQ6P8YCih+IFWv9Tsdr08PaNXzkj ol/d00uDttsz3cI2SfTO+MjmHnsErb0qfTU8+UTd0iGZylUhBVgFO7XQm/xBg8f1abGE VtKOt3GPMS/LxoUQRP5dcqamHQpkUVDLFs5Z3WiDkmI47C6Wa0qdzzRwWerBgotlGzmg Fzq5IxnL+rSnuKD1Qi5w5FzpcAO1vGt/IY5SaD5RtaMZw8ttqyBbtqI15qAp1eH9XTbB gGWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@tmm1-net.20150623.gappssmtp.com header.s=20150623 header.b=rC/rrgL8; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v13si365400wrg.282.2017.11.14.21.02.01; Tue, 14 Nov 2017 21:02:04 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@tmm1-net.20150623.gappssmtp.com header.s=20150623 header.b=rC/rrgL8; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 663C6689F8B; Wed, 15 Nov 2017 07:01:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f195.google.com (mail-qt0-f195.google.com [209.85.216.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3F8CF689E1F for ; Wed, 15 Nov 2017 07:01:38 +0200 (EET) Received: by mail-qt0-f195.google.com with SMTP id n32so15586707qtb.2 for ; Tue, 14 Nov 2017 21:01:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tmm1-net.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=YIqQu2qcGldWHzCsXacGT2Xno/qNpLWu2eCJ9/j/ang=; b=rC/rrgL8v0Ty009s4mifiMDC3YOTU/R3oTsIZ2hj1AGKaqfRJC/ZpRGIXzYi1brHNi 2WiqbK2rKv9IBUeZys1gNK/HnX/4QdNEdyCIpV/Oy6FIG1+6vIWtHN9oAWOcnZC8h/JQ 2x7oGzziaTJQW6+Ji+SVL0sub0PJkZVlzfYHBPxTNmnM0lwyz3USr8PZ5iAnAOUYdMCn WRzPVlRa3H93sBIXNd5idyXukEQIS4FSWJ/hLhLO51HzTRH+U/FN3ZtushfY7s5F1xmf VEUP2+UQfLbFlqwRzNX72vMJ52k78XCDTU2aOOhxRXbYjfIL7uYVh0OLG8toTaZb7B2+ UXPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=YIqQu2qcGldWHzCsXacGT2Xno/qNpLWu2eCJ9/j/ang=; b=SWTmYGWnUfVSuG5tUtb/wDjfKUi9QHyb22Y2T62TZyQHudDU2R81VcbtLXJhahAjdg Ccjp6XD7iVY176sPHWSjn71Cu5h4QBCFBOgkTFKFmRZyXiOLY5KdEQ42ZhUNDaVKuby6 Ppc3VYu00yXZCJgEP0iDAm8xTwz1OnablY5gm8CZupEzm/Rj8A+MtF+p2We1iwpO1sRB z3GuMtev/Ia5j1kaWHSre7JifpMb27Yoktm3iNqWRbusM0v5ia+Dq5e8AJGBy6RuvwjJ YI7BLzKzH9mYPxlO3jZ5lEn0RJ5TGtHOQkKpg4oeb0lhL8jmTB5rV0i4q3m4oMS8YrL9 qCWw== X-Gm-Message-State: AJaThX5jgsSoaynh6JUPYK5cySSSN50+HKvA8JiXnhDjoLxOoaGXebzw nPfbzvFttlHBOAeT/3TxaeplsEoO X-Received: by 10.200.44.187 with SMTP id 56mr7594290qtw.238.1510722112220; Tue, 14 Nov 2017 21:01:52 -0800 (PST) Received: from tmm1-imac.local.net (c-24-6-8-87.hsd1.ca.comcast.net. [24.6.8.87]) by smtp.gmail.com with ESMTPSA id e190sm13613123qkf.55.2017.11.14.21.01.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 14 Nov 2017 21:01:51 -0800 (PST) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Nov 2017 21:01:33 -0800 Message-Id: <20171115050134.4385-1-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.14.2 Subject: [FFmpeg-devel] [PATCH v3 1/2] avformat/tcp: add option to enable TCP_NODELAY X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: kjeyapal@akamai.com, Aman Gupta MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Aman Gupta This can reduce latency and increase throughput, particularly on high latency networks. Signed-off-by: Aman Gupta Reviewed-by: Jeyapal, Karthick --- doc/protocols.texi | 3 +++ libavformat/network.h | 1 + libavformat/tcp.c | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/doc/protocols.texi b/doc/protocols.texi index a7968ff56e..4d48f8a411 100644 --- a/doc/protocols.texi +++ b/doc/protocols.texi @@ -1242,6 +1242,9 @@ Set receive buffer size, expressed bytes. @item send_buffer_size=@var{bytes} Set send buffer size, expressed bytes. + +@item tcp_nodelay=@var{1|0} +Set TCP_NODELAY to disable Nagle's algorithm. Default value is 0. @end table The following example shows how to setup a listening TCP connection diff --git a/libavformat/network.h b/libavformat/network.h index f83c796a95..b78e3ad6ed 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -59,6 +59,7 @@ int ff_neterrno(void); #include #include #include +#include #include #define ff_neterrno() AVERROR(errno) diff --git a/libavformat/tcp.c b/libavformat/tcp.c index 07b4ed9fa3..f3f9d4f431 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -41,6 +41,7 @@ typedef struct TCPContext { int listen_timeout; int recv_buffer_size; int send_buffer_size; + int tcp_nodelay; } TCPContext; #define OFFSET(x) offsetof(TCPContext, x) @@ -52,6 +53,7 @@ static const AVOption options[] = { { "listen_timeout", "Connection awaiting timeout (in milliseconds)", OFFSET(listen_timeout), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E }, { "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 }, { NULL } }; @@ -148,6 +150,9 @@ static int tcp_open(URLContext *h, const char *uri, int flags) if (s->send_buffer_size > 0) { setsockopt (fd, SOL_SOCKET, SO_SNDBUF, &s->send_buffer_size, sizeof (s->send_buffer_size)); } + if (s->tcp_nodelay > 0) { + setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &s->tcp_nodelay, sizeof (s->tcp_nodelay)); + } if (s->listen == 2) { // multi-client