@@ -35,6 +35,8 @@ pub struct HttpConnector<R = GaiResolver> {
3535 nodelay : bool ,
3636 resolver : R ,
3737 reuse_address : bool ,
38+ send_buf_size : Option < usize > ,
39+ recv_buf_size : Option < usize > ,
3840}
3941
4042/// Extra information about the transport when an HttpConnector is used.
@@ -124,6 +126,8 @@ impl<R> HttpConnector<R> {
124126 nodelay : false ,
125127 resolver,
126128 reuse_address : false ,
129+ send_buf_size : None ,
130+ recv_buf_size : None ,
127131 }
128132 }
129133
@@ -161,6 +165,18 @@ impl<R> HttpConnector<R> {
161165 self . nodelay = nodelay;
162166 }
163167
168+ /// Sets the value of the SO_SNDBUF option on the socket.
169+ #[ inline]
170+ pub fn set_send_buf_size ( & mut self , size : Option < usize > ) {
171+ self . send_buf_size = size;
172+ }
173+
174+ /// Sets the value of the SO_RCVBUF option on the socket.
175+ #[ inline]
176+ pub fn set_recv_buf_size ( & mut self , size : Option < usize > ) {
177+ self . recv_buf_size = size;
178+ }
179+
164180 /// Set that all sockets are bound to the configured address before connection.
165181 ///
166182 /// If `None`, the sockets will not be bound.
@@ -248,6 +264,8 @@ where
248264 nodelay : self . nodelay ,
249265 port,
250266 reuse_address : self . reuse_address ,
267+ send_buf_size : self . send_buf_size ,
268+ recv_buf_size : self . recv_buf_size ,
251269 }
252270 }
253271}
@@ -269,6 +287,8 @@ fn invalid_url<R: Resolve>(err: InvalidUrl, handle: &Option<Handle>) -> HttpConn
269287 port : 0 ,
270288 happy_eyeballs_timeout : None ,
271289 reuse_address : false ,
290+ send_buf_size : None ,
291+ recv_buf_size : None ,
272292 }
273293}
274294
@@ -304,6 +324,8 @@ pub struct HttpConnecting<R: Resolve = GaiResolver> {
304324 nodelay : bool ,
305325 port : u16 ,
306326 reuse_address : bool ,
327+ send_buf_size : Option < usize > ,
328+ recv_buf_size : Option < usize > ,
307329}
308330
309331enum State < R : Resolve > {
@@ -353,6 +375,14 @@ impl<R: Resolve> Future for HttpConnecting<R> {
353375 sock. set_keepalive ( Some ( dur) ) ?;
354376 }
355377
378+ if let Some ( size) = self . send_buf_size {
379+ sock. set_send_buffer_size ( size) ?;
380+ }
381+
382+ if let Some ( size) = self . recv_buf_size {
383+ sock. set_recv_buffer_size ( size) ?;
384+ }
385+
356386 sock. set_nodelay ( self . nodelay ) ?;
357387
358388 let extra = HttpInfo {
0 commit comments