aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-net/src/tcp_socket.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/embassy-net/src/tcp_socket.rs b/embassy-net/src/tcp_socket.rs
index 2433771c8..bb1b626e7 100644
--- a/embassy-net/src/tcp_socket.rs
+++ b/embassy-net/src/tcp_socket.rs
@@ -58,6 +58,26 @@ impl<'a> TcpSocket<'a> {
58 .await 58 .await
59 } 59 }
60 60
61 pub async fn listen<T>(&mut self, local_endpoint: T) -> Result<()>
62 where
63 T: Into<IpEndpoint>,
64 {
65 self.with(|s| s.listen(local_endpoint))?;
66
67 futures::future::poll_fn(|cx| {
68 self.with(|s| match s.state() {
69 TcpState::Closed | TcpState::TimeWait => Poll::Ready(Err(Error::Unaddressable)),
70 TcpState::Listen => Poll::Ready(Ok(())),
71 TcpState::SynSent | TcpState::SynReceived => {
72 s.register_send_waker(cx.waker());
73 Poll::Pending
74 }
75 _ => Poll::Ready(Ok(())),
76 })
77 })
78 .await
79 }
80
61 pub fn set_timeout(&mut self, duration: Option<Duration>) { 81 pub fn set_timeout(&mut self, duration: Option<Duration>) {
62 self.with(|s| s.set_timeout(duration)) 82 self.with(|s| s.set_timeout(duration))
63 } 83 }