Merge pull request #3437 from embassy-rs/net-flush-udp-raw

net: Add flush for UDP and Raw sockets.
This commit is contained in:
Dario Nieuwenhuis 2024-10-21 00:13:11 +00:00 committed by GitHub
commit 4a1d189393
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 35 additions and 1 deletions

View File

@ -68,7 +68,7 @@ multicast = ["smoltcp/multicast"]
defmt = { version = "0.3", optional = true } defmt = { version = "0.3", optional = true }
log = { version = "0.4.14", optional = true } log = { version = "0.4.14", optional = true }
smoltcp = { git="https://github.com/smoltcp-rs/smoltcp", rev="b65e1b64dc9b66fa984a2ad34e90685cb0b606de", default-features = false, features = [ smoltcp = { git="https://github.com/smoltcp-rs/smoltcp", rev="fe0b4d102253465850cd1cf39cd33d4721a4a8d5", default-features = false, features = [
"socket", "socket",
"async", "async",
] } ] }

View File

@ -108,6 +108,23 @@ impl<'a> RawSocket<'a> {
} }
}) })
} }
/// Flush the socket.
///
/// This method will wait until the socket is flushed.
pub async fn flush(&mut self) {
poll_fn(move |cx| {
self.with_mut(|s, _| {
if s.send_queue() == 0 {
Poll::Ready(())
} else {
s.register_send_waker(cx.waker());
Poll::Pending
}
})
})
.await
}
} }
impl Drop for RawSocket<'_> { impl Drop for RawSocket<'_> {

View File

@ -241,6 +241,23 @@ impl<'a> UdpSocket<'a> {
.await .await
} }
/// Flush the socket.
///
/// This method will wait until the socket is flushed.
pub async fn flush(&mut self) {
poll_fn(move |cx| {
self.with_mut(|s, _| {
if s.send_queue() == 0 {
Poll::Ready(())
} else {
s.register_send_waker(cx.waker());
Poll::Pending
}
})
})
.await
}
/// Returns the local endpoint of the socket. /// Returns the local endpoint of the socket.
pub fn endpoint(&self) -> IpListenEndpoint { pub fn endpoint(&self) -> IpListenEndpoint {
self.with(|s, _| s.endpoint()) self.with(|s, _| s.endpoint())