diff options
| -rw-r--r-- | embassy-net/src/tcp.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/embassy-net/src/tcp.rs b/embassy-net/src/tcp.rs index 74eff9dae..be0e1a129 100644 --- a/embassy-net/src/tcp.rs +++ b/embassy-net/src/tcp.rs | |||
| @@ -660,12 +660,25 @@ pub mod client { | |||
| 660 | pub struct TcpClient<'d, D: Driver, const N: usize, const TX_SZ: usize = 1024, const RX_SZ: usize = 1024> { | 660 | pub struct TcpClient<'d, D: Driver, const N: usize, const TX_SZ: usize = 1024, const RX_SZ: usize = 1024> { |
| 661 | stack: &'d Stack<D>, | 661 | stack: &'d Stack<D>, |
| 662 | state: &'d TcpClientState<N, TX_SZ, RX_SZ>, | 662 | state: &'d TcpClientState<N, TX_SZ, RX_SZ>, |
| 663 | socket_timeout: Option<Duration>, | ||
| 663 | } | 664 | } |
| 664 | 665 | ||
| 665 | impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpClient<'d, D, N, TX_SZ, RX_SZ> { | 666 | impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpClient<'d, D, N, TX_SZ, RX_SZ> { |
| 666 | /// Create a new `TcpClient`. | 667 | /// Create a new `TcpClient`. |
| 667 | pub fn new(stack: &'d Stack<D>, state: &'d TcpClientState<N, TX_SZ, RX_SZ>) -> Self { | 668 | pub fn new(stack: &'d Stack<D>, state: &'d TcpClientState<N, TX_SZ, RX_SZ>) -> Self { |
| 668 | Self { stack, state } | 669 | Self { |
| 670 | stack, | ||
| 671 | state, | ||
| 672 | socket_timeout: None, | ||
| 673 | } | ||
| 674 | } | ||
| 675 | |||
| 676 | /// Set the timeout for each socket created by this `TcpClient`. | ||
| 677 | /// | ||
| 678 | /// If the timeout is set, the socket will be closed if no data is received for the | ||
| 679 | /// specified duration. | ||
| 680 | pub fn set_timeout(&mut self, timeout: Option<Duration>) { | ||
| 681 | self.socket_timeout = timeout; | ||
| 669 | } | 682 | } |
| 670 | } | 683 | } |
| 671 | 684 | ||
| @@ -691,6 +704,7 @@ pub mod client { | |||
| 691 | }; | 704 | }; |
| 692 | let remote_endpoint = (addr, remote.port()); | 705 | let remote_endpoint = (addr, remote.port()); |
| 693 | let mut socket = TcpConnection::new(&self.stack, self.state)?; | 706 | let mut socket = TcpConnection::new(&self.stack, self.state)?; |
| 707 | socket.socket.set_timeout(self.socket_timeout.clone()); | ||
| 694 | socket | 708 | socket |
| 695 | .socket | 709 | .socket |
| 696 | .connect(remote_endpoint) | 710 | .connect(remote_endpoint) |
