mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-22 06:42:32 +00:00
Allow setting socket timeout for embedded-nal TcpClient, such that every new socket from that client gets the timeout
This commit is contained in:
parent
e54c753537
commit
01f709c1d9
@ -660,12 +660,25 @@ pub mod client {
|
|||||||
pub struct TcpClient<'d, D: Driver, const N: usize, const TX_SZ: usize = 1024, const RX_SZ: usize = 1024> {
|
pub struct TcpClient<'d, D: Driver, const N: usize, const TX_SZ: usize = 1024, const RX_SZ: usize = 1024> {
|
||||||
stack: &'d Stack<D>,
|
stack: &'d Stack<D>,
|
||||||
state: &'d TcpClientState<N, TX_SZ, RX_SZ>,
|
state: &'d TcpClientState<N, TX_SZ, RX_SZ>,
|
||||||
|
socket_timeout: Option<Duration>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpClient<'d, D, N, TX_SZ, RX_SZ> {
|
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpClient<'d, D, N, TX_SZ, RX_SZ> {
|
||||||
/// Create a new `TcpClient`.
|
/// Create a new `TcpClient`.
|
||||||
pub fn new(stack: &'d Stack<D>, state: &'d TcpClientState<N, TX_SZ, RX_SZ>) -> Self {
|
pub fn new(stack: &'d Stack<D>, state: &'d TcpClientState<N, TX_SZ, RX_SZ>) -> Self {
|
||||||
Self { stack, state }
|
Self {
|
||||||
|
stack,
|
||||||
|
state,
|
||||||
|
socket_timeout: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the timeout for each socket created by this `TcpClient`.
|
||||||
|
///
|
||||||
|
/// If the timeout is set, the socket will be closed if no data is received for the
|
||||||
|
/// specified duration.
|
||||||
|
pub fn set_timeout(&mut self, timeout: Option<Duration>) {
|
||||||
|
self.socket_timeout = timeout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -691,6 +704,7 @@ pub mod client {
|
|||||||
};
|
};
|
||||||
let remote_endpoint = (addr, remote.port());
|
let remote_endpoint = (addr, remote.port());
|
||||||
let mut socket = TcpConnection::new(&self.stack, self.state)?;
|
let mut socket = TcpConnection::new(&self.stack, self.state)?;
|
||||||
|
socket.socket.set_timeout(self.socket_timeout.clone());
|
||||||
socket
|
socket
|
||||||
.socket
|
.socket
|
||||||
.connect(remote_endpoint)
|
.connect(remote_endpoint)
|
||||||
|
Loading…
Reference in New Issue
Block a user