Skip to content

Commit 75972da

Browse files
mcollinaBethGriggs
authored andcommitted
net: implement capture rejections for 'connection' event
PR-URL: #27867 Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Jeremiah Senkpiel <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Michaël Zasso <[email protected]>
1 parent 35a33f6 commit 75972da

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

lib/_http_server.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,11 @@ Server.prototype.setTimeout = function setTimeout(msecs, callback) {
368368
};
369369

370370
Server.prototype[EE.captureRejectionSymbol] = function(
371-
err, event, req, res) {
371+
err, event, ...args) {
372372

373373
switch (event) {
374374
case 'request':
375+
const [ , res] = args;
375376
if (!res.headersSent && !res.writableEnded) {
376377
// Don't leak headers.
377378
for (const name of res.getHeaderNames()) {
@@ -384,7 +385,8 @@ Server.prototype[EE.captureRejectionSymbol] = function(
384385
}
385386
break;
386387
default:
387-
this.emit('error', err);
388+
net.Server.prototype[Symbol.for('nodejs.rejection')]
389+
.call(this, err, event, ...args);
388390
}
389391
};
390392

lib/net.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1655,6 +1655,19 @@ function emitCloseNT(self) {
16551655
}
16561656

16571657

1658+
Server.prototype[EventEmitter.captureRejectionSymbol] = function(
1659+
err, event, sock) {
1660+
1661+
switch (event) {
1662+
case 'connection':
1663+
sock.destroy(err);
1664+
break;
1665+
default:
1666+
this.emit('error', err);
1667+
}
1668+
};
1669+
1670+
16581671
// Legacy alias on the C++ wrapper object. This is not public API, so we may
16591672
// want to runtime-deprecate it at some point. There's no hurry, though.
16601673
ObjectDefineProperty(TCP.prototype, 'owner', {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'use strict';
2+
3+
const common = require('../common');
4+
const assert = require('assert');
5+
const events = require('events');
6+
const { createServer, connect } = require('net');
7+
8+
events.captureRejections = true;
9+
10+
const server = createServer(common.mustCall(async (sock) => {
11+
server.close();
12+
13+
const _err = new Error('kaboom');
14+
sock.on('error', common.mustCall((err) => {
15+
assert.strictEqual(err, _err);
16+
}));
17+
throw _err;
18+
}));
19+
20+
server.listen(0, common.mustCall(() => {
21+
const sock = connect(
22+
server.address().port,
23+
server.address().host
24+
);
25+
26+
sock.on('close', common.mustCall());
27+
}));

0 commit comments

Comments
 (0)