[FFmpeg-devel] avformat/http: reconnect when connect reset by peer
lmzeng(曾令明)
lmzeng at tencent.com
Fri Mar 1 11:39:14 EET 2019
diff --git a/libavformat/http.c b/libavformat/http.c
old mode 100644
new mode 100755
index ed0eb1c..400df94
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -253,6 +253,7 @@ static int http_open_cnx(URLContext *h, AVDictionary **options)
HTTPAuthType cur_auth_type, cur_proxy_auth_type;
HTTPContext *s = h->priv_data;
int location_changed, attempts = 0, redirects = 0;
+ int retry = 0;
redo:
av_dict_copy(options, s->chained_options, 0);
@@ -260,9 +261,21 @@ redo:
cur_proxy_auth_type = s->auth_state.auth_type;
location_changed = http_open_cnx_internal(h, options);
- if (location_changed < 0)
+ if (location_changed < 0) {
+ if (s->reconnect && retry++ < 3 &&
+ ((location_changed == AVERROR(ECONNRESET)) || (location_changed == AVERROR(EPIPE)) ||
+ (location_changed == AVERROR(ENETRESET)) || (location_changed == AVERROR(ECONNREFUSED)) ||
+ (location_changed == AVERROR(ETIMEDOUT)))) {
+ if (ff_network_sleep_interruptible(1000U*1000, &h->interrupt_callback) != AVERROR(ETIMEDOUT)) {
+ goto fail;
+ }
+ if (s->hd) {
+ ffurl_closep(&s->hd);
+ }
+ goto redo;
+ }
goto fail;
-
+ }
attempts++;
if (s->http_code == 401) {
if ((cur_auth_type == HTTP_AUTH_NONE || s->auth_state.stale) &&
More information about the ffmpeg-devel
mailing list