hyperium / hyper

An HTTP library for Rust
https://hyper.rs
MIT License
14.37k stars 1.58k forks source link

Implementing RFC 8305 Happy Eyeballs v2 #2450

Open erickt opened 3 years ago

erickt commented 3 years ago

Hello! I wanted to let you know on Fuchsia we ended up implementing RFC 8305, otherwise known as Happy Eyeballs v2 (see here). The main advantages over RFC 6555 Happy Eyeballs v1 is that v1 can only have a single IPv4 and IPv6 connection requests in flight, but that risks the client stalling out on a black holed address. v2 can have multiple active connections from the same address family to work around this issue.

I'd love to someday upstream it, but I don't currently have the time to figure out how to decouple our implementation from Fuchsia's primitives. The biggest complication is that v2 carries some complex interaction with timers, and our tests leverage the Fuchsia executor's ability to precisely manipulate time to test the various boundary conditions of our implementation. I'm not familiar with tokio/async-std/smol/etc, so I'm not sure if there's a migration process.

I'd be happy to help someone implement the migration in the meantime if someone else needs this functionality.

seanmonstar commented 3 years ago

This would definitely be a good thing to add! I'm less familiar with other runtimes, but tokio::time has pause, advance and resume, which is what I think you're talking about.

Somewhat related, I've wanted to add the ability to provide a custom Timer type, similar to Executor, so that this functionality could exist with other runtimes as well (or even just to customize more).