Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Abort DNS lookup on request abort #84

Open
miraclx opened this issue Apr 11, 2024 · 0 comments
Open

Abort DNS lookup on request abort #84

miraclx opened this issue Apr 11, 2024 · 0 comments

Comments

@miraclx
Copy link

miraclx commented Apr 11, 2024

simple-get/index.js

Lines 74 to 77 in e7a7411

req.on('timeout', () => {
req.abort()
cb(new Error('Request timed out'))
})

This calls abort on the request, and fires the callback. So you'd expect simpleGet to have relinquished all execution back to the caller.

But in a super simple example of simply making a request to some URL, and exiting (nothing more), there is an observed 30s delay between when the callback is called with the error and before the process exits.

I looked into it, and it appears this is caused by the fact that the http module from node defaults to dns.lookup which is not cancellable.

I experimented with swapping this out with Tangerine which maintains an internal AbortController and adding a tangerine.cancel() on any error and it worked flawlessly.

Slight hiccup though - tangerine's peer dependency is undici so it might be unfortunate to pull that in if you're not using it. Ref: #64

But there's other DNS alternatives that don't require undici. Up to you, just figured I'd mention this here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant