summaryrefslogtreecommitdiff
path: root/libavformat/http.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavformat/http.c')
-rw-r--r--libavformat/http.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/libavformat/http.c b/libavformat/http.c
index d76a58bbbb..aa6348f28b 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -1623,6 +1623,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;
}