send proper max stream ID in graceful goaway (#254)

This commit is contained in:
Sean McArthur
2018-04-06 15:51:34 -07:00
committed by GitHub
parent 60749db680
commit dca336f8b2
4 changed files with 7 additions and 6 deletions

View File

@@ -14,8 +14,6 @@ impl StreamId {
pub const MAX: StreamId = StreamId(u32::MAX >> 1);
pub const MAX_CLIENT: StreamId = StreamId((u32::MAX >> 1) - 1);
/// Parse the stream ID
#[inline]
pub fn parse(buf: &[u8]) -> (StreamId, bool) {

View File

@@ -383,14 +383,14 @@ where
//
// > A server that is attempting to gracefully shut down a connection
// > SHOULD send an initial GOAWAY frame with the last stream
// > identifier set to 231-1 and a NO_ERROR code. This signals to the
// > identifier set to 2^31-1 and a NO_ERROR code. This signals to the
// > client that a shutdown is imminent and that initiating further
// > requests is prohibited. After allowing time for any in-flight
// > stream creation (at least one round-trip time), the server can
// > send another GOAWAY frame with an updated last stream identifier.
// > This ensures that a connection can be cleanly shut down without
// > losing requests.
self.go_away(StreamId::MAX_CLIENT, Reason::NO_ERROR);
self.go_away(StreamId::MAX, Reason::NO_ERROR);
// We take the advice of waiting 1 RTT literally, and wait
// for a pong before proceeding.

View File

@@ -103,7 +103,7 @@ impl GoAway {
pub fn should_close_on_idle(&self) -> bool {
!self.close_now && self.going_away
.as_ref()
.map(|g| g.last_processed_id != StreamId::MAX_CLIENT)
.map(|g| g.last_processed_id != StreamId::MAX)
.unwrap_or(false)
}

View File

@@ -245,7 +245,10 @@ fn graceful_shutdown() {
.request("GET", "https://example.com/")
.eos(),
)
.recv_frame(frames::go_away(StreamId::MAX_CLIENT))
// 2^31 - 1 = 2147483647
// Note: not using a constant in the library because library devs
// can be unsmart.
.recv_frame(frames::go_away(2147483647))
.recv_frame(frames::ping(frame::Ping::SHUTDOWN))
.recv_frame(frames::headers(1).response(200).eos())
// Pretend this stream was sent while the GOAWAY was in flight