diff --git a/lib/internal/quic/core.js b/lib/internal/quic/core.js index d70b99378a24a4..a35acb265bda60 100644 --- a/lib/internal/quic/core.js +++ b/lib/internal/quic/core.js @@ -1031,7 +1031,13 @@ class QuicSocket extends EventEmitter { // used to either listen or connect. No QuicServerSession should // exist before this event, and all QuicClientSession will remain // in Initial states until ready is invoked. - process.nextTick(emit.bind(this, 'ready')); + process.nextTick(() => { + try { + this.emit('ready'); + } catch (error) { + this.destroy(error); + } + }); } // Called when a QuicEndpoint closes diff --git a/test/parallel/test-quic-server-ready-event-error-async.js b/test/parallel/test-quic-server-ready-event-error-async.js new file mode 100644 index 00000000000000..4d42d4725df0d9 --- /dev/null +++ b/test/parallel/test-quic-server-ready-event-error-async.js @@ -0,0 +1,31 @@ +// Flags: --no-warnings +'use strict'; + +const common = require('../common'); +if (!common.hasQuic) + common.skip('missing quic'); + +const assert = require('assert'); +const { + key, + cert, + ca, +} = require('../common/quic'); + +const { createQuicSocket } = require('net'); + +const options = { key, cert, ca, alpn: 'zzz' }; + +const server = createQuicSocket({ server: options }); + +server.on('session', common.mustNotCall()); + +server.listen(); + +server.on('error', common.mustCall((error) => { + assert.strictEqual(error.message, 'boom'); +})); + +server.on('ready', common.mustCall(async () => { + throw new Error('boom'); +})); diff --git a/test/parallel/test-quic-server-ready-event-error.js b/test/parallel/test-quic-server-ready-event-error.js new file mode 100644 index 00000000000000..df3e626530999a --- /dev/null +++ b/test/parallel/test-quic-server-ready-event-error.js @@ -0,0 +1,31 @@ +// Flags: --no-warnings +'use strict'; + +const common = require('../common'); +if (!common.hasQuic) + common.skip('missing quic'); + +const assert = require('assert'); +const { + key, + cert, + ca, +} = require('../common/quic'); + +const { createQuicSocket } = require('net'); + +const options = { key, cert, ca, alpn: 'zzz' }; + +const server = createQuicSocket({ server: options }); + +server.on('session', common.mustNotCall()); + +server.listen(); + +server.on('error', common.mustCall((error) => { + assert.strictEqual(error.message, 'boom'); +})); + +server.on('ready', common.mustCall(() => { + throw new Error('boom'); +}));