diff options
| -rw-r--r-- | embassy-net/src/tcp_socket.rs | 20 |
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 | } |
