diff --git a/Cargo.toml b/Cargo.toml index e3a54f0ed..c5b71c530 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ bytes = { version = "1", optional = true } futures-util = { version = "0.3.15", default-features = false, optional = true } pin-project-lite = { version = "0.2", optional = true } tokio-util = { version = "0.7", optional = true } -tokio = { version = "1", features = ["rt"], optional = true } +tokio = { version = "1", features = ["rt", "net"], optional = true } # Only needed for the connection manager arc-swap = { version = "1.1.0", optional = true } diff --git a/src/aio.rs b/src/aio.rs index a4be73546..c79ec84b9 100644 --- a/src/aio.rs +++ b/src/aio.rs @@ -4,7 +4,6 @@ use std::collections::VecDeque; use std::io; use std::mem; use std::net::SocketAddr; -use std::net::ToSocketAddrs; #[cfg(unix)] use std::path::Path; use std::pin::Pin; @@ -14,6 +13,7 @@ use combine::{parser::combinator::AnySendSyncPartialState, stream::PointerOffset use ::tokio::{ io::{AsyncRead, AsyncWrite, AsyncWriteExt}, + net::lookup_host, sync::{mpsc, oneshot}, }; @@ -456,7 +456,7 @@ pub(crate) async fn connect_simple( ) -> RedisResult { Ok(match connection_info.addr { ConnectionAddr::Tcp(ref host, port) => { - let socket_addr = get_socket_addrs(host, port)?; + let socket_addr = get_socket_addrs(host, port).await?; ::connect_tcp(socket_addr).await? } @@ -466,7 +466,7 @@ pub(crate) async fn connect_simple( port, insecure, } => { - let socket_addr = get_socket_addrs(host, port)?; + let socket_addr = get_socket_addrs(host, port).await?; ::connect_tcp_tls(host, socket_addr, insecure).await? } @@ -492,8 +492,8 @@ pub(crate) async fn connect_simple( }) } -fn get_socket_addrs(host: &str, port: u16) -> RedisResult { - let mut socket_addrs = (host, port).to_socket_addrs()?; +async fn get_socket_addrs(host: &str, port: u16) -> RedisResult { + let mut socket_addrs = lookup_host((host, port)).await?; match socket_addrs.next() { Some(socket_addr) => Ok(socket_addr), None => Err(RedisError::from((