@@ -52,12 +52,21 @@ const DEFAULT_STREAM_WINDOW: u32 = 1024 * 1024 * 2; // 2mb
52
52
const DEFAULT_MAX_FRAME_SIZE : u32 = 1024 * 16 ; // 16kb
53
53
const DEFAULT_MAX_SEND_BUF_SIZE : usize = 1024 * 1024 ; // 1mb
54
54
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
+
55
64
#[ derive( Clone , Debug ) ]
56
65
pub ( crate ) struct Config {
57
66
pub ( crate ) adaptive_window : bool ,
58
67
pub ( crate ) initial_conn_window_size : u32 ,
59
68
pub ( crate ) initial_stream_window_size : u32 ,
60
- pub ( crate ) initial_max_send_streams : Option < usize > ,
69
+ pub ( crate ) initial_max_send_streams : usize ,
61
70
pub ( crate ) max_frame_size : u32 ,
62
71
pub ( crate ) keep_alive_interval : Option < Duration > ,
63
72
pub ( crate ) keep_alive_timeout : Duration ,
@@ -72,7 +81,7 @@ impl Default for Config {
72
81
adaptive_window : false ,
73
82
initial_conn_window_size : DEFAULT_CONN_WINDOW ,
74
83
initial_stream_window_size : DEFAULT_STREAM_WINDOW ,
75
- initial_max_send_streams : None ,
84
+ initial_max_send_streams : DEFAULT_INITIAL_MAX_SEND_STREAMS ,
76
85
max_frame_size : DEFAULT_MAX_FRAME_SIZE ,
77
86
keep_alive_interval : None ,
78
87
keep_alive_timeout : Duration :: from_secs ( 20 ) ,
@@ -86,14 +95,12 @@ impl Default for Config {
86
95
fn new_builder ( config : & Config ) -> Builder {
87
96
let mut builder = Builder :: default ( ) ;
88
97
builder
98
+ . initial_max_send_streams ( config. initial_max_send_streams )
89
99
. initial_window_size ( config. initial_stream_window_size )
90
100
. initial_connection_window_size ( config. initial_conn_window_size )
91
101
. max_frame_size ( config. max_frame_size )
92
102
. max_send_buffer_size ( config. max_send_buffer_size )
93
103
. 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
- }
97
104
if let Some ( max) = config. max_concurrent_reset_streams {
98
105
builder. max_concurrent_reset_streams ( max) ;
99
106
}
0 commit comments