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: StreamId = StreamId(u32::MAX >> 1);
pub const MAX_CLIENT: StreamId = StreamId((u32::MAX >> 1) - 1);
/// Parse the stream ID /// Parse the stream ID
#[inline] #[inline]
pub fn parse(buf: &[u8]) -> (StreamId, bool) { 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 // > A server that is attempting to gracefully shut down a connection
// > SHOULD send an initial GOAWAY frame with the last stream // > 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 // > client that a shutdown is imminent and that initiating further
// > requests is prohibited. After allowing time for any in-flight // > requests is prohibited. After allowing time for any in-flight
// > stream creation (at least one round-trip time), the server can // > stream creation (at least one round-trip time), the server can
// > send another GOAWAY frame with an updated last stream identifier. // > send another GOAWAY frame with an updated last stream identifier.
// > This ensures that a connection can be cleanly shut down without // > This ensures that a connection can be cleanly shut down without
// > losing requests. // > 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 // We take the advice of waiting 1 RTT literally, and wait
// for a pong before proceeding. // for a pong before proceeding.

View File

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

View File

@@ -245,7 +245,10 @@ fn graceful_shutdown() {
.request("GET", "https://example.com/") .request("GET", "https://example.com/")
.eos(), .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::ping(frame::Ping::SHUTDOWN))
.recv_frame(frames::headers(1).response(200).eos()) .recv_frame(frames::headers(1).response(200).eos())
// Pretend this stream was sent while the GOAWAY was in flight // Pretend this stream was sent while the GOAWAY was in flight