aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-10-21 00:13:11 +0000
committerGitHub <[email protected]>2024-10-21 00:13:11 +0000
commit4a1d18939308b57a2562b3c00ecd3b3d4416b6cf (patch)
tree34613d0e022e7b76d0f4dc60626ff1d64917adc5
parent34eeaa0787594c62b3797c3fd57db205bcb8ec95 (diff)
parentb4ee17fb4f1a77c26fc08e9fe9e0d343d1c059b4 (diff)
Merge pull request #3437 from embassy-rs/net-flush-udp-raw
net: Add flush for UDP and Raw sockets.
-rw-r--r--embassy-net/Cargo.toml2
-rw-r--r--embassy-net/src/raw.rs17
-rw-r--r--embassy-net/src/udp.rs17
3 files changed, 35 insertions, 1 deletions
diff --git a/embassy-net/Cargo.toml b/embassy-net/Cargo.toml
index a33c693fc..8a29aca79 100644
--- a/embassy-net/Cargo.toml
+++ b/embassy-net/Cargo.toml
@@ -68,7 +68,7 @@ multicast = ["smoltcp/multicast"]
68defmt = { version = "0.3", optional = true } 68defmt = { version = "0.3", optional = true }
69log = { version = "0.4.14", optional = true } 69log = { version = "0.4.14", optional = true }
70 70
71smoltcp = { git="https://github.com/smoltcp-rs/smoltcp", rev="b65e1b64dc9b66fa984a2ad34e90685cb0b606de", default-features = false, features = [ 71smoltcp = { git="https://github.com/smoltcp-rs/smoltcp", rev="fe0b4d102253465850cd1cf39cd33d4721a4a8d5", default-features = false, features = [
72 "socket", 72 "socket",
73 "async", 73 "async",
74] } 74] }
diff --git a/embassy-net/src/raw.rs b/embassy-net/src/raw.rs
index 1098dc208..ace325a46 100644
--- a/embassy-net/src/raw.rs
+++ b/embassy-net/src/raw.rs
@@ -108,6 +108,23 @@ impl<'a> RawSocket<'a> {
108 } 108 }
109 }) 109 })
110 } 110 }
111
112 /// Flush the socket.
113 ///
114 /// This method will wait until the socket is flushed.
115 pub async fn flush(&mut self) {
116 poll_fn(move |cx| {
117 self.with_mut(|s, _| {
118 if s.send_queue() == 0 {
119 Poll::Ready(())
120 } else {
121 s.register_send_waker(cx.waker());
122 Poll::Pending
123 }
124 })
125 })
126 .await
127 }
111} 128}
112 129
113impl Drop for RawSocket<'_> { 130impl Drop for RawSocket<'_> {
diff --git a/embassy-net/src/udp.rs b/embassy-net/src/udp.rs
index 3eb6e2f83..ac650364e 100644
--- a/embassy-net/src/udp.rs
+++ b/embassy-net/src/udp.rs
@@ -241,6 +241,23 @@ impl<'a> UdpSocket<'a> {
241 .await 241 .await
242 } 242 }
243 243
244 /// Flush the socket.
245 ///
246 /// This method will wait until the socket is flushed.
247 pub async fn flush(&mut self) {
248 poll_fn(move |cx| {
249 self.with_mut(|s, _| {
250 if s.send_queue() == 0 {
251 Poll::Ready(())
252 } else {
253 s.register_send_waker(cx.waker());
254 Poll::Pending
255 }
256 })
257 })
258 .await
259 }
260
244 /// Returns the local endpoint of the socket. 261 /// Returns the local endpoint of the socket.
245 pub fn endpoint(&self) -> IpListenEndpoint { 262 pub fn endpoint(&self) -> IpListenEndpoint {
246 self.with(|s, _| s.endpoint()) 263 self.with(|s, _| s.endpoint())