From patchwork Wed Apr 4 11:08:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dixit, Vishwanath" X-Patchwork-Id: 8325 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp4742525jad; Wed, 4 Apr 2018 04:08:37 -0700 (PDT) X-Google-Smtp-Source: AIpwx49Dn/g5kOpnmTFkOFOsQES+nhC2a3Q07OQAoqof2MD4NChewxC+TOxxc/hxTZrVjGJ2nvhz X-Received: by 10.223.155.154 with SMTP id d26mr14164264wrc.8.1522840117760; Wed, 04 Apr 2018 04:08:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522840117; cv=none; d=google.com; s=arc-20160816; b=ALmt9Rxur5bMe1WDKsWhWmIoSiWAu6BPusU6NwW/N3GtUVPtmpWNDjYfBH0nzmYAg0 hAAxzW/syQX/JNzEUPufmPhNjva9D17Xy4OI1ux+MLzcvfSw5nft8JON9kQB/DALCilG WNsiPmriooMg7uq4LTtZmA+8fVnjZHQJ++Agq61KtjtbzQRDf3f2iB5wKRLRkKdu8XCZ EKzJJMF5bBcdXWzlPYg+dVJ79M+05wq9vKYb8JAH7+xvnFRkq2eDOSWCQAgF5qPSVr1j vwZXShU4Ru46WjhjtEyjFMgE5x+zxJcOK+8t2qQEgS7KuUNJmasgghEUMYLVy+ztPReL uMrQ== 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:feedback-id:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=XqpOhmE57dV4d7JyAb1XvhgTPeyBi+4eRNAnkmH+Brw=; b=g2fdfAxpOqC4EQQfG1qDGkVgOnQw4ykBozzLf8M/OoHYr6pFwRf5hDld6LaoZC/qDM zPMIf4742nPyafLicAU7bCZE+g03BLJyfg1eSIsa5LbP9lWBnVV5RL7rwdtlO/5bMqCn 4rRL7/lcenStyu9opeG3niWhNjqfOrMAc0xcB8TaJszeSbkuvgQHJWFc4L308xgRk5S1 cp2CYSzXqDA23KRQOWdy4NXq65+8OwFQJ8I7xItrjMK8RpTCJ//gq8QAz7g2TU1kjFrP A7zv7UdkEplbDLeaqLYehr1z+WohbjIzUQ0DVfe4VfHKNcUOp74aemvHD2atztyUUtsj P4tw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=2zZxc14y; 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; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p66si3737379wrc.201.2018.04.04.04.08.36; Wed, 04 Apr 2018 04:08:37 -0700 (PDT) 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=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=2zZxc14y; 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; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 287686805E8; Wed, 4 Apr 2018 14:08:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a1i318.smtp2go.com (a1i318.smtp2go.com [43.228.185.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 91A61680359 for ; Wed, 4 Apr 2018 14:08:07 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=m78bu0.a1-4.dyn; x=1522841014; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe; bh=rsMerjD4KNO3JloUn1vOlTqXTIacHO4d/K42U/lh68c=; b=2zZxc14y CYMkpI9qOmaTYG8aFIXAh1aqfsP3YpWOAoV4YTlePFuPNjTA56KKIBLY629PtKEwuH4wptFX7yLiG BZ5jDHIpgykFmA/JWXI3For/AWso2emWY3Gi7DYHsgsGv2qezDqQiXc5znMPJWuZXOXdwhNtSnRFJ Cjoqyqk8kPg08zkyv7CZIocJ7KgqxhI3Rt4nF0Qy5Rq6s78brq48mZfTbS7kmUzQHL9eFQwv08DE+ f5/KtLm0QsLjkptbd84LH2/IOJ3vEBYUDdewS0q/jbOBo3MoLCsoSM65NALG7FytbMZJGrdwNGQWM DmYBkM43JfEOcHHgoV6fPyUrHQ==; From: vdixit@akamai.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 4 Apr 2018 16:38:18 +0530 Message-Id: <1522840098-27481-1-git-send-email-vdixit@akamai.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: References: X-Smtpcorp-Track: 1f3gHj4baU6KDi.xemp39Duk Feedback-ID: 337386m:337386asVRLGB:337386s8p3bOfwRb:SMTPCORP X-Report-Abuse: Please forward a copy of this message, including all headers, to Subject: [FFmpeg-devel] [PATCH v2 1/1] avformat/http: flushing tcp receive buffer when it is write only mode 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: Vishwanath Dixit MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Vishwanath Dixit In write only mode, the TCP receive buffer's data keeps growing with http response messages and the buffer eventually becomes full. This results in zero tcp window size, which in turn causes unwanted issues, like, terminated tcp connection. The issue is apparent when http persistent connection is enabled in hls/dash live streaming use cases. To overcome this issue, the logic here reads the buffer data when a file transfer is completed, so that any accumulated data in the recieve buffer gets flushed out. --- libavformat/http.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libavformat/http.c b/libavformat/http.c index 983034f..0c39e9c 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -1627,6 +1627,18 @@ static int http_shutdown(URLContext *h, int flags) ((flags & AVIO_FLAG_READ) && s->chunked_post && s->listen)) { ret = ffurl_write(s->hd, footer, sizeof(footer) - 1); ret = ret > 0 ? 0 : ret; + /* flush the receive buffer when it is write only mode */ + if (!(flags & AVIO_FLAG_READ)) { + char buf[1024]; + int read_ret; + s->hd->flags |= AVIO_FLAG_NONBLOCK; + read_ret = ffurl_read(s->hd, buf, sizeof(buf)); + s->hd->flags &= ~AVIO_FLAG_NONBLOCK; + if (read_ret < 0 && read_ret != AVERROR(EAGAIN)) { + av_log(h, AV_LOG_ERROR, "URL read error: %d\n", read_ret); + ret = read_ret; + } + } s->end_chunked_post = 1; }