diff options
| -rw-r--r-- | embassy-net/Cargo.toml | 1 | ||||
| -rw-r--r-- | embassy-net/src/dns.rs | 16 |
2 files changed, 15 insertions, 2 deletions
diff --git a/embassy-net/Cargo.toml b/embassy-net/Cargo.toml index 6b3468283..6eea8c307 100644 --- a/embassy-net/Cargo.toml +++ b/embassy-net/Cargo.toml | |||
| @@ -40,6 +40,7 @@ smoltcp = { version = "0.9.0", default-features = false, features = [ | |||
| 40 | ]} | 40 | ]} |
| 41 | 41 | ||
| 42 | embassy-net-driver = { version = "0.1.0", path = "../embassy-net-driver" } | 42 | embassy-net-driver = { version = "0.1.0", path = "../embassy-net-driver" } |
| 43 | embassy-hal-common = { version = "0.1.0", path = "../embassy-hal-common" } | ||
| 43 | embassy-time = { version = "0.1.0", path = "../embassy-time" } | 44 | embassy-time = { version = "0.1.0", path = "../embassy-time" } |
| 44 | embassy-sync = { version = "0.1.0", path = "../embassy-sync" } | 45 | embassy-sync = { version = "0.1.0", path = "../embassy-sync" } |
| 45 | embedded-io = { version = "0.4.0", optional = true } | 46 | embedded-io = { version = "0.4.0", optional = true } |
diff --git a/embassy-net/src/dns.rs b/embassy-net/src/dns.rs index f18750cc3..2d2e7b79b 100644 --- a/embassy-net/src/dns.rs +++ b/embassy-net/src/dns.rs | |||
| @@ -11,6 +11,7 @@ use smoltcp::iface::{Interface, SocketHandle}; | |||
| 11 | pub use smoltcp::socket::dns::DnsQuery; | 11 | pub use smoltcp::socket::dns::DnsQuery; |
| 12 | use smoltcp::socket::dns::{self, GetQueryResultError, StartQueryError, MAX_ADDRESS_COUNT}; | 12 | use smoltcp::socket::dns::{self, GetQueryResultError, StartQueryError, MAX_ADDRESS_COUNT}; |
| 13 | pub use smoltcp::wire::{DnsQueryType, IpAddress}; | 13 | pub use smoltcp::wire::{DnsQueryType, IpAddress}; |
| 14 | use embassy_hal_common::drop::OnDrop; | ||
| 14 | 15 | ||
| 15 | use crate::{SocketStack, Stack}; | 16 | use crate::{SocketStack, Stack}; |
| 16 | 17 | ||
| @@ -93,7 +94,15 @@ impl<'a> DnsSocket<'a> { | |||
| 93 | Err(e) => return Err(e.into()), | 94 | Err(e) => return Err(e.into()), |
| 94 | }; | 95 | }; |
| 95 | 96 | ||
| 96 | poll_fn(|cx| { | 97 | let handle = self.handle; |
| 98 | let drop = OnDrop::new(|| { | ||
| 99 | let s = &mut *self.stack.borrow_mut(); | ||
| 100 | let socket = s.sockets.get_mut::<dns::Socket>(handle); | ||
| 101 | socket.cancel_query(query); | ||
| 102 | s.waker.wake(); | ||
| 103 | }); | ||
| 104 | |||
| 105 | let res = poll_fn(|cx| { | ||
| 97 | self.with_mut(|s, _| match s.get_query_result(query) { | 106 | self.with_mut(|s, _| match s.get_query_result(query) { |
| 98 | Ok(addrs) => Poll::Ready(Ok(addrs)), | 107 | Ok(addrs) => Poll::Ready(Ok(addrs)), |
| 99 | Err(GetQueryResultError::Pending) => { | 108 | Err(GetQueryResultError::Pending) => { |
| @@ -103,7 +112,10 @@ impl<'a> DnsSocket<'a> { | |||
| 103 | Err(e) => Poll::Ready(Err(e.into())), | 112 | Err(e) => Poll::Ready(Err(e.into())), |
| 104 | }) | 113 | }) |
| 105 | }) | 114 | }) |
| 106 | .await | 115 | .await; |
| 116 | |||
| 117 | drop.defuse(); | ||
| 118 | res | ||
| 107 | } | 119 | } |
| 108 | } | 120 | } |
| 109 | 121 | ||
