net: check for close on stream, not parent
'close' event isn't emitted on a TLS connection if it's been written to (but 'end' and 'finish' events are). PR-URL: https://github.com/nodejs/node/pull/25026 Fixes: https://github.com/nodejs/node/issues/24984 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
ae73b73eeb
commit
86e2ec41af
@ -368,8 +368,8 @@ Socket.prototype._final = function(cb) {
|
||||
};
|
||||
|
||||
|
||||
function afterShutdown(status, handle) {
|
||||
var self = handle[owner_symbol];
|
||||
function afterShutdown(status) {
|
||||
var self = this.handle[owner_symbol];
|
||||
|
||||
debug('afterShutdown destroyed=%j', self.destroyed,
|
||||
self._readableState);
|
||||
|
41
test/parallel/test-tls-close-event-after-write.js
Normal file
41
test/parallel/test-tls-close-event-after-write.js
Normal file
@ -0,0 +1,41 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
|
||||
if (!common.hasCrypto)
|
||||
common.skip('missing crypto');
|
||||
|
||||
// Issue #24984
|
||||
// 'close' event isn't emitted on a TLS connection if it's been written to
|
||||
// (but 'end' and 'finish' events are). Without a fix, this test won't exit.
|
||||
|
||||
const tls = require('tls');
|
||||
const fixtures = require('../common/fixtures');
|
||||
let cconn = null;
|
||||
let sconn = null;
|
||||
|
||||
function test() {
|
||||
if (cconn && sconn) {
|
||||
cconn.resume();
|
||||
sconn.resume();
|
||||
sconn.end(Buffer.alloc(1024 * 1024));
|
||||
cconn.end();
|
||||
}
|
||||
}
|
||||
|
||||
const server = tls.createServer({
|
||||
key: fixtures.readKey('agent1-key.pem'),
|
||||
cert: fixtures.readKey('agent1-cert.pem')
|
||||
}, function(c) {
|
||||
c.on('close', function() {
|
||||
server.close();
|
||||
});
|
||||
sconn = c;
|
||||
test();
|
||||
}).listen(0, common.mustCall(function() {
|
||||
tls.connect(this.address().port, {
|
||||
rejectUnauthorized: false
|
||||
}, common.mustCall(function() {
|
||||
cconn = this;
|
||||
test();
|
||||
}));
|
||||
}));
|
Loading…
x
Reference in New Issue
Block a user