Skip to content

Commit 386109c

Browse files
maurerdietmarseanmonstar
authored andcommitted
feat(client): HttpConnector: allow to set socket buffer sizes
Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
1 parent 31ec07a commit 386109c

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

src/client/connect/http.rs

+30
Original file line numberDiff line numberDiff line change
@@ -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

309331
enum 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

Comments
 (0)