Skip to content

Commit 4eecee0

Browse files
mcollinatargos
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 334d4f6 commit 4eecee0

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
@@ -359,10 +359,11 @@ Server.prototype.setTimeout = function setTimeout(msecs, callback){
359359
};
360360

361361
Server.prototype[EE.captureRejectionSymbol]=function(
362-
err,event,req,res){
362+
err,event,...args){
363363

364364
switch(event){
365365
case'request':
366+
const[,res]=args;
366367
if(!res.headersSent&&!res.writableEnded){
367368
// Don't leak headers.
368369
for(constnameofres.getHeaderNames()){
@@ -375,7 +376,8 @@ Server.prototype[EE.captureRejectionSymbol] = function(
375376
}
376377
break;
377378
default:
378-
this.emit('error',err);
379+
net.Server.prototype[Symbol.for('nodejs.rejection')]
380+
.call(this,err,event, ...args);
379381
}
380382
};
381383

‎lib/net.js‎

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

16551655

1656+
Server.prototype[EventEmitter.captureRejectionSymbol]=function(
1657+
err,event,sock){
1658+
1659+
switch(event){
1660+
case'connection':
1661+
sock.destroy(err);
1662+
break;
1663+
default:
1664+
this.emit('error',err);
1665+
}
1666+
};
1667+
1668+
16561669
// Legacy alias on the C++ wrapper object. This is not public API, so we may
16571670
// want to runtime-deprecate it at some point. There's no hurry, though.
16581671
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+
constcommon=require('../common');
4+
constassert=require('assert');
5+
constevents=require('events');
6+
const{ createServer, connect }=require('net');
7+
8+
events.captureRejections=true;
9+
10+
constserver=createServer(common.mustCall(async(sock)=>{
11+
server.close();
12+
13+
const_err=newError('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+
constsock=connect(
22+
server.address().port,
23+
server.address().host
24+
);
25+
26+
sock.on('close',common.mustCall());
27+
}));

0 commit comments

Comments
(0)