Skip to content

Commit e7303e8

Browse files
committed
set initial_max_send_streams only when it is explicitly set by users
1 parent 7d0d0b2 commit e7303e8

File tree

2 files changed

+7
-18
lines changed

2 files changed

+7
-18
lines changed

src/client/conn/http2.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -310,15 +310,11 @@ where
310310
/// This value will be overwritten by the value included in the initial
311311
/// SETTINGS frame received from the peer as part of a [connection preface].
312312
///
313-
/// Passing `None` will do nothing.
314-
///
315-
/// If not set, hyper will use a default.
313+
/// The default value is determined by the `h2` crate.
316314
///
317315
/// [connection preface]: https://httpwg.org/specs/rfc9113.html#preface
318316
pub fn initial_max_send_streams(&mut self, initial: impl Into<Option<usize>>) -> &mut Self {
319-
if let Some(initial) = initial.into() {
320-
self.h2_builder.initial_max_send_streams = initial;
321-
}
317+
self.h2_builder.initial_max_send_streams = initial.into();
322318
self
323319
}
324320

src/proto/h2/client.rs

+5-12
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,12 @@ const DEFAULT_STREAM_WINDOW: u32 = 1024 * 1024 * 2; // 2mb
5252
const DEFAULT_MAX_FRAME_SIZE: u32 = 1024 * 16; // 16kb
5353
const DEFAULT_MAX_SEND_BUF_SIZE: usize = 1024 * 1024; // 1mb
5454

55-
// The maximum number of concurrent streams that the client is allowed to open
56-
// before it receives the initial SETTINGS frame from the server.
57-
// This default value is derived from what the HTTP/2 spec recommends as the
58-
// minimum value that endpoints advertise to their peers. It means that using
59-
// this value will minimize the chance of the failure where the local endpoint
60-
// attempts to open too many streams and gets rejected by the remote peer with
61-
// the `REFUSED_STREAM` error.
62-
const DEFAULT_INITIAL_MAX_SEND_STREAMS: usize = 100;
63-
6455
#[derive(Clone, Debug)]
6556
pub(crate) struct Config {
6657
pub(crate) adaptive_window: bool,
6758
pub(crate) initial_conn_window_size: u32,
6859
pub(crate) initial_stream_window_size: u32,
69-
pub(crate) initial_max_send_streams: usize,
60+
pub(crate) initial_max_send_streams: Option<usize>,
7061
pub(crate) max_frame_size: u32,
7162
pub(crate) keep_alive_interval: Option<Duration>,
7263
pub(crate) keep_alive_timeout: Duration,
@@ -81,7 +72,7 @@ impl Default for Config {
8172
adaptive_window: false,
8273
initial_conn_window_size: DEFAULT_CONN_WINDOW,
8374
initial_stream_window_size: DEFAULT_STREAM_WINDOW,
84-
initial_max_send_streams: DEFAULT_INITIAL_MAX_SEND_STREAMS,
75+
initial_max_send_streams: None,
8576
max_frame_size: DEFAULT_MAX_FRAME_SIZE,
8677
keep_alive_interval: None,
8778
keep_alive_timeout: Duration::from_secs(20),
@@ -95,12 +86,14 @@ impl Default for Config {
9586
fn new_builder(config: &Config) -> Builder {
9687
let mut builder = Builder::default();
9788
builder
98-
.initial_max_send_streams(config.initial_max_send_streams)
9989
.initial_window_size(config.initial_stream_window_size)
10090
.initial_connection_window_size(config.initial_conn_window_size)
10191
.max_frame_size(config.max_frame_size)
10292
.max_send_buffer_size(config.max_send_buffer_size)
10393
.enable_push(false);
94+
if let Some(initial_max_send_streams) = config.initial_max_send_streams {
95+
builder.initial_max_send_streams(initial_max_send_streams);
96+
}
10497
if let Some(max) = config.max_concurrent_reset_streams {
10598
builder.max_concurrent_reset_streams(max);
10699
}

0 commit comments

Comments
 (0)