summaryrefslogtreecommitdiff
path: root/js/net_test.ts
diff options
context:
space:
mode:
authorKevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>2019-01-15 17:36:51 -0800
committerRyan Dahl <ry@tinyclouds.org>2019-01-15 20:36:51 -0500
commit431e455642cee8f7258814d6bb9b426a99d1256b (patch)
tree0ebde25e545a0054eca451b9c97bd3e9f393efe3 /js/net_test.ts
parentc870cf40823a4900278f8ddf03489338c169878b (diff)
Kill all pending accepts when TCP listener is closed (#1517)
Diffstat (limited to 'js/net_test.ts')
-rw-r--r--js/net_test.ts36
1 files changed, 36 insertions, 0 deletions
diff --git a/js/net_test.ts b/js/net_test.ts
index 6ba36547f..be415f19c 100644
--- a/js/net_test.ts
+++ b/js/net_test.ts
@@ -8,6 +8,42 @@ testPerm({ net: true }, function netListenClose() {
listener.close();
});
+testPerm({ net: true }, async function netCloseWhileAccept() {
+ const listener = deno.listen("tcp", ":4501");
+ const p = listener.accept();
+ listener.close();
+ let err;
+ try {
+ await p;
+ } catch (e) {
+ err = e;
+ }
+ assert(!!err);
+ assertEqual(err.kind, deno.ErrorKind.Other);
+ assertEqual(err.message, "Listener has been closed");
+});
+
+testPerm({ net: true }, async function netConcurrentAccept() {
+ const listener = deno.listen("tcp", ":4502");
+ let err;
+ // Consume this accept error
+ // (since it would still be waiting when listener.close is called)
+ listener.accept().catch(e => {
+ assertEqual(e.kind, deno.ErrorKind.Other);
+ assertEqual(e.message, "Listener has been closed");
+ });
+ const p1 = listener.accept();
+ try {
+ await p1;
+ } catch (e) {
+ err = e;
+ }
+ assert(!!err);
+ assertEqual(err.kind, deno.ErrorKind.Other);
+ assertEqual(err.message, "Another accept task is ongoing");
+ listener.close();
+});
+
testPerm({ net: true }, async function netDialListen() {
const listener = deno.listen("tcp", ":4500");
listener.accept().then(async conn => {