summaryrefslogtreecommitdiff
path: root/lib/multi.c
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-02-17 21:36:59 +0900
committerJay Satiro <raysatiro@yahoo.com>2016-04-11 21:43:24 -0400
commit92c2a4c053f75bbfe8434379dbdd6acd714a2252 (patch)
tree8e9ddd90b90500e33da0cf006a11ee6b18b47334 /lib/multi.c
parentb2a0376350cb4f788ca2cdff2e89a23bdc789888 (diff)
downloadgnurl-92c2a4c053f75bbfe8434379dbdd6acd714a2252.tar.gz
gnurl-92c2a4c053f75bbfe8434379dbdd6acd714a2252.tar.bz2
gnurl-92c2a4c053f75bbfe8434379dbdd6acd714a2252.zip
http2: Add handling stream level error
Previously, when a stream was closed with other than NGHTTP2_NO_ERROR by RST_STREAM, underlying TCP connection was dropped. This is undesirable since there may be other streams multiplexed and they are very much fine. This change introduce new error code CURLE_HTTP2_STREAM, which indicates stream error that only affects the relevant stream, and connection should be kept open. The existing CURLE_HTTP2 means connection error in general. Ref: https://github.com/curl/curl/issues/659 Ref: https://github.com/curl/curl/pull/663
Diffstat (limited to 'lib/multi.c')
-rw-r--r--lib/multi.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/multi.c b/lib/multi.c
index 8c69e37a5..b1c1f5396 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -1880,7 +1880,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
* happened in the data connection.
*/
- if(!(data->easy_conn->handler->flags & PROTOPT_DUAL))
+ if(!(data->easy_conn->handler->flags & PROTOPT_DUAL) &&
+ result != CURLE_HTTP2_STREAM)
connclose(data->easy_conn, "Transfer returned error");
Curl_posttransfer(data);