[GH-ISSUE #1779] How to set connect timeout for DoH and DoT async client ? #766

Open
opened 2026-03-16 00:10:17 +03:00 by kerem · 0 comments
Owner

Originally created by @hi-glenn on GitHub (Sep 19, 2022).
Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/1779

DoH:

    let mut doh_stream = match HttpsClientStreamBuilder::with_client_config(client_config.clone())
        .build::<AsyncIoTokioAsStd<TokioTcpStream>>(*socker_addr, server_name.to_string())
        .await
    {
        Ok(a) => a,
        Err(err) => {
            return Err(err.to_string());
        }
    };

    match doh_stream.send_message(request).first_answer().await {
        Ok(res) => {
            println!("doh res: {:?}", res);
            Ok(())
        }
        Err(err) => Err(err.to_string()),
    }

DoT:

    let mut client = {
        let (stream, sender) =
            tls_client_stream::tls_client_connect::<AsyncIoTokioAsStd<TokioTcpStream>>(
                *socker_addr,
                server_name.to_string(),
                tls_client_config.clone(),
            );

        let (client, bg) =
            match AsyncClient::with_timeout(stream, sender, Duration::from_secs(4), None).await {
                Ok(a) => a,
                Err(err) => {
                    println!("DoT asyncClient err: {}", err.to_string());
                    return Err(err.to_string());
                }
            };

        tokio::spawn(bg);

        client
    };

    match client
        .query(Name::from_str(qname).unwrap(), DNSClass::IN, RecordType::A)
        .await
    {
        Ok(res) => {
            println!("DoT res: {:?}", res);
            Ok(())
        }
        Err(err) => Err(err.to_string()),
    }
Originally created by @hi-glenn on GitHub (Sep 19, 2022). Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/1779 DoH: ``` let mut doh_stream = match HttpsClientStreamBuilder::with_client_config(client_config.clone()) .build::<AsyncIoTokioAsStd<TokioTcpStream>>(*socker_addr, server_name.to_string()) .await { Ok(a) => a, Err(err) => { return Err(err.to_string()); } }; match doh_stream.send_message(request).first_answer().await { Ok(res) => { println!("doh res: {:?}", res); Ok(()) } Err(err) => Err(err.to_string()), } ``` --- DoT: ``` let mut client = { let (stream, sender) = tls_client_stream::tls_client_connect::<AsyncIoTokioAsStd<TokioTcpStream>>( *socker_addr, server_name.to_string(), tls_client_config.clone(), ); let (client, bg) = match AsyncClient::with_timeout(stream, sender, Duration::from_secs(4), None).await { Ok(a) => a, Err(err) => { println!("DoT asyncClient err: {}", err.to_string()); return Err(err.to_string()); } }; tokio::spawn(bg); client }; match client .query(Name::from_str(qname).unwrap(), DNSClass::IN, RecordType::A) .await { Ok(res) => { println!("DoT res: {:?}", res); Ok(()) } Err(err) => Err(err.to_string()), } ```
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#766
No description provided.