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(constnameofres.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+
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)