summaryrefslogtreecommitdiff
path: root/ext/net/01_net.js
diff options
context:
space:
mode:
authorLeo Kettmeir <crowlkats@toaxl.com>2023-02-11 15:14:02 +0100
committerGitHub <noreply@github.com>2023-02-11 14:14:02 +0000
commita55f0eb2fc005016dc9d44bfe4771dd451df9c30 (patch)
tree7d2a2ea9f6271a18e6d4f12309e3fa244e979bfa /ext/net/01_net.js
parente22ebc6b6bb733a111ba02781e53e186f9c8bcc8 (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.js28
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 {