On 4/4/18, 4:38 PM, "vdi...@akamai.com" <vdi...@akamai.com> wrote: > >From: Vishwanath Dixit <vdi...@akamai.com> > >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; > } Pushed.
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel