From b95a3c4b2851192775d14daa5f8e543666ab0606 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Mon, 16 Nov 2015 22:53:31 +0900 Subject: [PATCH] Consider to use CANCEL error code when closing streams with GOAWAY For clients, CANCEL is more appropriate for both incoming/outgoing streams. For servers, CANCEL is appropriate for its pushed stream (outgoing), but REFUSED_STREAM is more appropriate for incoming stream. --- lib/nghttp2_session.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/nghttp2_session.c b/lib/nghttp2_session.c index 366a8007..de65867b 100644 --- a/lib/nghttp2_session.c +++ b/lib/nghttp2_session.c @@ -2200,16 +2200,19 @@ static int session_close_stream_on_goaway(nghttp2_session *session, nghttp2_stream *stream, *next_stream; nghttp2_close_stream_on_goaway_arg arg = {session, NULL, last_stream_id, incoming}; + uint32_t error_code; rv = nghttp2_map_each(&session->streams, find_stream_on_goaway_func, &arg); assert(rv == 0); + error_code = + session->server && incoming ? NGHTTP2_REFUSED_STREAM : NGHTTP2_CANCEL; + stream = arg.head; while (stream) { next_stream = stream->closed_next; stream->closed_next = NULL; - rv = nghttp2_session_close_stream(session, stream->stream_id, - NGHTTP2_REFUSED_STREAM); + rv = nghttp2_session_close_stream(session, stream->stream_id, error_code); /* stream may be deleted here */