feross / feross/simple-get

Happy Eyeballs breaks simple-get if ipv6 times out

Open
#85 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
402
Forks
49
PR merge metrics
No merged PRs in 30d

Description

The underlying issue is that when dns resolves to multiple IPs all ips are attempted. ipv6 is tried first, then ipv4. This behavior is known as Happy Eyeballs. https://en.wikipedia.org/wiki/Happy_Eyeballs

node http now (v18 or v20?) tries both ipv6 and ipv4 addresses on requests.

For every ip connect timeout failure, it will emit a timeout event which simple-get interprets as an error and terminate the request (which is still attempting other ips).
https://github.com/feross/simple-get/blob/e7a74115ca9dd28720f186275c5a67df81985426/index.js#L75
Specifically, disabling/ignoring this ipv6 timeout event in simple-get allows the request to succeed on ipv4, and prebuild-install completes successfully.

This timeout event handling may be a bug in either node (since the entire request hasnt timed out, just 1 ip attempt), or a bug in simple-get where it should be more discerning about which request timeout events it should observe. In any case, this is an issue with an end user machines ipv6 network configuration.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.