[GH-ISSUE #2364] Please need more examples. How to properly enable resolver in my tokio project? #971

Open
opened 2026-03-16 01:08:17 +03:00 by kerem · 1 comment
Owner

Originally created by @Cergoo on GitHub (Aug 20, 2024).
Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/2364

Hi,

fn main() -> Result<()>{
    let mut rt = tokio::runtime::Runtime::new().unwrap();
    let _guard = rt.enter();

    rt.block_on(async {
        let resolver = TokioAsyncResolver::tokio(ResolverConfig::default(), ResolverOpts::default());    
        let addr = SocketAddr::from(([127, 0, 0, 1], 8080));
        let listener = TcpListener::bind(addr).await.unwrap();
        println!("sever start");

        loop {
            let (socket, _) = listener.accept().await.unwrap();
            let addr = socket.peer_addr().unwrap();
            rt.spawn(async move {
                let _ = process(socket).await.or_else(|x| {
                    println!("err {:?}", x);
                    Err(x)
                });
            });
            println!("socket close: {:?}", addr);
        }

    })
}


async fn process(mut socket: TcpStream) -> Result<()> {
    let mut buffer = BytesMut::with_capacity(4096);
    if 0 == socket.read_buf(&mut buffer).await? {
        if buffer.is_empty() {
            return Ok(());
        } else {
            return Err("connection reset by peer".into());
        }
    }
    
    let addr = parse_http_head(buffer.borrow())?;
 
   <-      get dns resolv her  ?  ______________________________________________
    
    Ok(())
}
Originally created by @Cergoo on GitHub (Aug 20, 2024). Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/2364 Hi, ```rust fn main() -> Result<()>{ let mut rt = tokio::runtime::Runtime::new().unwrap(); let _guard = rt.enter(); rt.block_on(async { let resolver = TokioAsyncResolver::tokio(ResolverConfig::default(), ResolverOpts::default()); let addr = SocketAddr::from(([127, 0, 0, 1], 8080)); let listener = TcpListener::bind(addr).await.unwrap(); println!("sever start"); loop { let (socket, _) = listener.accept().await.unwrap(); let addr = socket.peer_addr().unwrap(); rt.spawn(async move { let _ = process(socket).await.or_else(|x| { println!("err {:?}", x); Err(x) }); }); println!("socket close: {:?}", addr); } }) } async fn process(mut socket: TcpStream) -> Result<()> { let mut buffer = BytesMut::with_capacity(4096); if 0 == socket.read_buf(&mut buffer).await? { if buffer.is_empty() { return Ok(()); } else { return Err("connection reset by peer".into()); } } let addr = parse_http_head(buffer.borrow())?; <- get dns resolv her ? ______________________________________________ Ok(()) } ```
Author
Owner

@djc commented on GitHub (Aug 20, 2024):

Well, if you want to use the TokioAsyncResolver from process() you'll at least have to pass a reference to it. Then, I'm guessing you'll want to call lookup_ip() on it.

<!-- gh-comment-id:2298393711 --> @djc commented on GitHub (Aug 20, 2024): Well, if you want to use the `TokioAsyncResolver` from `process()` you'll at least have to pass a reference to it. Then, I'm guessing you'll want to call `lookup_ip()` on it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/hickory-dns#971
No description provided.