[PR #3487] Recursor: support Happy Eyeballs for lookups #3886

Open
opened 2026-03-16 12:08:07 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/hickory-dns/hickory-dns/pull/3487
Author: @Cyberax
Created: 3/8/2026
Status: 🔄 Open

Base: mainHead: feat/happy-eyeball-recursor


📝 Commits (1)

  • f0e0e73 Recursor: support Happy Eyeballs for lookups

📊 Changes

4 files changed (+189 additions, -12 deletions)

View changed files

📝 crates/resolver/src/config.rs (+9 -0)
📝 crates/resolver/src/name_server_pool.rs (+104 -2)
📝 crates/resolver/src/recursor/handle.rs (+43 -10)
📝 crates/resolver/src/recursor/mod.rs (+33 -0)

📄 Description

Before this change, the recursor would fail if the server has a broken IPv6 connectivity for a couple of reasons.

  1. The timeout error from the servers was treated as a non-recoverable error. So a failed IPv6 lookup would immediately disqualify the name server.
  2. Even after adding a timeout to recoverable error, a cascade of lookups needed to validate a DNSSEC name could easily take ~20 seconds for a typical name, resulting in app-level timeouts.

This commit adds an option to restrict connectivity to IPv4/IPv6/both, and it also adds an option (default) to run V4 and V6 queries in parallel.

AI disclosure: the code was written manually by me, AI was used for basic full-line completions, and to generate the tests.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/hickory-dns/hickory-dns/pull/3487 **Author:** [@Cyberax](https://github.com/Cyberax) **Created:** 3/8/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `feat/happy-eyeball-recursor` --- ### 📝 Commits (1) - [`f0e0e73`](https://github.com/hickory-dns/hickory-dns/commit/f0e0e73bd3c2327a14bbe7f2a10a67d5df22f2b1) Recursor: support Happy Eyeballs for lookups ### 📊 Changes **4 files changed** (+189 additions, -12 deletions) <details> <summary>View changed files</summary> 📝 `crates/resolver/src/config.rs` (+9 -0) 📝 `crates/resolver/src/name_server_pool.rs` (+104 -2) 📝 `crates/resolver/src/recursor/handle.rs` (+43 -10) 📝 `crates/resolver/src/recursor/mod.rs` (+33 -0) </details> ### 📄 Description Before this change, the recursor would fail if the server has a broken IPv6 connectivity for a couple of reasons. 1. The timeout error from the servers was treated as a non-recoverable error. So a failed IPv6 lookup would immediately disqualify the name server. 2. Even after adding a timeout to recoverable error, a cascade of lookups needed to validate a DNSSEC name could easily take ~20 seconds for a typical name, resulting in app-level timeouts. This commit adds an option to restrict connectivity to IPv4/IPv6/both, and it also adds an option (default) to run V4 and V6 queries in parallel. AI disclosure: the code was written manually by me, AI was used for basic full-line completions, and to generate the tests. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
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#3886
No description provided.