diff options
author | Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com> | 2019-01-15 17:36:51 -0800 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-01-15 20:36:51 -0500 |
commit | 431e455642cee8f7258814d6bb9b426a99d1256b (patch) | |
tree | 0ebde25e545a0054eca451b9c97bd3e9f393efe3 /js/net_test.ts | |
parent | c870cf40823a4900278f8ddf03489338c169878b (diff) |
Kill all pending accepts when TCP listener is closed (#1517)
Diffstat (limited to 'js/net_test.ts')
-rw-r--r-- | js/net_test.ts | 36 |
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 => { |