mirror of
https://github.com/curl/curl.git
synced 2026-08-26 12:13:32 +03:00
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
This commit is contained in:
parent
b2a0376350
commit
92c2a4c053
7 changed files with 20 additions and 2 deletions
|
|
@ -1059,7 +1059,7 @@ static ssize_t http2_handle_stream_close(struct connectdata *conn,
|
|||
if(stream->error_code != NGHTTP2_NO_ERROR) {
|
||||
failf(data, "HTTP/2 stream %u was not closed cleanly: error_code = %d",
|
||||
stream->stream_id, stream->error_code);
|
||||
*err = CURLE_HTTP2;
|
||||
*err = CURLE_HTTP2_STREAM;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -1231,6 +1231,13 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex,
|
|||
*err = CURLE_AGAIN;
|
||||
return -1;
|
||||
}
|
||||
else if(!nghttp2_session_want_read(httpc->h2) &&
|
||||
!nghttp2_session_want_write(httpc->h2)) {
|
||||
DEBUGF(infof(data,
|
||||
"http2_recv: nothing to do in this session\n"));
|
||||
*err = CURLE_HTTP2;
|
||||
return -1;
|
||||
}
|
||||
else {
|
||||
char *inbuf;
|
||||
/* remember where to store incoming data for this stream and how big the
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue