aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkbleeke <[email protected]>2023-02-25 20:58:28 +0100
committerkbleeke <[email protected]>2023-02-25 21:52:15 +0100
commitd5f88e578c98555d3fc57924dfb7974c9789aa06 (patch)
tree52e8bb3f5c2567e1ba79771b91871ddc829a3b74
parent64247ae456edbbf49b3ab096278d77da2782cca7 (diff)
embassy-net: DNS resolver detects when name is just an IP address and returns immediately
-rw-r--r--embassy-net/src/lib.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs
index bda5f9e14..4ec1b5a77 100644
--- a/embassy-net/src/lib.rs
+++ b/embassy-net/src/lib.rs
@@ -236,6 +236,22 @@ impl<D: Driver + 'static> Stack<D> {
236 /// Make a query for a given name and return the corresponding IP addresses. 236 /// Make a query for a given name and return the corresponding IP addresses.
237 #[cfg(feature = "dns")] 237 #[cfg(feature = "dns")]
238 pub async fn dns_query(&self, name: &str, qtype: dns::DnsQueryType) -> Result<Vec<IpAddress, 1>, dns::Error> { 238 pub async fn dns_query(&self, name: &str, qtype: dns::DnsQueryType) -> Result<Vec<IpAddress, 1>, dns::Error> {
239 // For A and AAAA queries we try detect whether `name` is just an IP address
240 match qtype {
241 dns::DnsQueryType::A => {
242 if let Ok(ip) = name.parse().map(IpAddress::Ipv4) {
243 return Ok([ip].into_iter().collect());
244 }
245 }
246 #[cfg(feature = "proto-ipv6")]
247 dns::DnsQueryType::Aaaa => {
248 if let Ok(ip) = name.parse().map(IpAddress::Ipv6) {
249 return Ok([ip].into_iter().collect());
250 }
251 }
252 _ => {}
253 }
254
239 let query = poll_fn(|cx| { 255 let query = poll_fn(|cx| {
240 self.with_mut(|s, i| { 256 self.with_mut(|s, i| {
241 let socket = s.sockets.get_mut::<dns::Socket>(i.dns_socket); 257 let socket = s.sockets.get_mut::<dns::Socket>(i.dns_socket);