Skip to content

Implementing RFC 8305 Happy Eyeballs v2 #2450

Open
hyperium/hyper-util
#255

Description

@erickt

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.

Activity

  1. added
    E-mediumEffort: medium. Some knowledge of how hyper internal works would be useful.
    C-featureCategory: feature. This is adding a new feature.
    on Mar 3, 2021
  2. seanmonstar commented on Mar 3, 2021

    @seanmonstar
    Member

    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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-clientArea: client.C-featureCategory: feature. This is adding a new feature.E-mediumEffort: medium. Some knowledge of how hyper internal works would be useful.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions