diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2023-02-11 15:14:02 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-11 14:14:02 +0000 |
commit | a55f0eb2fc005016dc9d44bfe4771dd451df9c30 (patch) | |
tree | 7d2a2ea9f6271a18e6d4f12309e3fa244e979bfa /ext/net/01_net.js | |
parent | e22ebc6b6bb733a111ba02781e53e186f9c8bcc8 (diff) |
feat: add signal option to Deno.resolveDns (#17384)
Closes #14406
Diffstat (limited to 'ext/net/01_net.js')
-rw-r--r-- | ext/net/01_net.js | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/ext/net/01_net.js b/ext/net/01_net.js index 7b427ef5e..c56f837b8 100644 --- a/ext/net/01_net.js +++ b/ext/net/01_net.js @@ -8,6 +8,7 @@ import { readableStreamForRidUnrefableUnref, writableStreamForRid, } from "internal:deno_web/06_streams.js"; +import * as abortSignal from "internal:deno_web/03_abort_signal.js"; const primordials = globalThis.__bootstrap.primordials; const { Error, @@ -30,8 +31,31 @@ function shutdown(rid) { return core.shutdown(rid); } -function resolveDns(query, recordType, options) { - return core.opAsync("op_dns_resolve", { query, recordType, options }); +async function resolveDns(query, recordType, options) { + let cancelRid; + let abortHandler; + if (options?.signal) { + options.signal.throwIfAborted(); + cancelRid = ops.op_cancel_handle(); + abortHandler = () => core.tryClose(cancelRid); + options.signal[abortSignal.add](abortHandler); + } + + try { + return await core.opAsync("op_dns_resolve", { + cancelRid, + query, + recordType, + options, + }); + } finally { + if (options?.signal) { + options.signal[abortSignal.remove](abortHandler); + + // always throw the abort error when aborted + options.signal.throwIfAborted(); + } + } } class Conn { |