@@ -35,6 +35,8 @@ pub struct HttpConnector<R = GaiResolver> {
35
35
nodelay : bool ,
36
36
resolver : R ,
37
37
reuse_address : bool ,
38
+ send_buf_size : Option < usize > ,
39
+ recv_buf_size : Option < usize > ,
38
40
}
39
41
40
42
/// Extra information about the transport when an HttpConnector is used.
@@ -124,6 +126,8 @@ impl<R> HttpConnector<R> {
124
126
nodelay : false ,
125
127
resolver,
126
128
reuse_address : false ,
129
+ send_buf_size : None ,
130
+ recv_buf_size : None ,
127
131
}
128
132
}
129
133
@@ -161,6 +165,18 @@ impl<R> HttpConnector<R> {
161
165
self . nodelay = nodelay;
162
166
}
163
167
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
+
164
180
/// Set that all sockets are bound to the configured address before connection.
165
181
///
166
182
/// If `None`, the sockets will not be bound.
@@ -248,6 +264,8 @@ where
248
264
nodelay : self . nodelay ,
249
265
port,
250
266
reuse_address : self . reuse_address ,
267
+ send_buf_size : self . send_buf_size ,
268
+ recv_buf_size : self . recv_buf_size ,
251
269
}
252
270
}
253
271
}
@@ -269,6 +287,8 @@ fn invalid_url<R: Resolve>(err: InvalidUrl, handle: &Option<Handle>) -> HttpConn
269
287
port : 0 ,
270
288
happy_eyeballs_timeout : None ,
271
289
reuse_address : false ,
290
+ send_buf_size : None ,
291
+ recv_buf_size : None ,
272
292
}
273
293
}
274
294
@@ -304,6 +324,8 @@ pub struct HttpConnecting<R: Resolve = GaiResolver> {
304
324
nodelay : bool ,
305
325
port : u16 ,
306
326
reuse_address : bool ,
327
+ send_buf_size : Option < usize > ,
328
+ recv_buf_size : Option < usize > ,
307
329
}
308
330
309
331
enum State < R : Resolve > {
@@ -353,6 +375,14 @@ impl<R: Resolve> Future for HttpConnecting<R> {
353
375
sock. set_keepalive ( Some ( dur) ) ?;
354
376
}
355
377
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
+
356
386
sock. set_nodelay ( self . nodelay ) ?;
357
387
358
388
let extra = HttpInfo {
0 commit comments