From 431e455642cee8f7258814d6bb9b426a99d1256b Mon Sep 17 00:00:00 2001 From: "Kevin (Kun) \"Kassimo\" Qian" Date: Tue, 15 Jan 2019 17:36:51 -0800 Subject: Kill all pending accepts when TCP listener is closed (#1517) --- js/net_test.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'js/net_test.ts') 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 => { -- cgit v1.2.3