Skip to content
Permalink
Browse files

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: #25026
Fixes: #24984
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information...
davedoesdev authored and targos committed Dec 13, 2018
1 parent 91d1aea commit 9ac8d41925f72d8667afb656defad58c13cfa1ff
Showing with 43 additions and 2 deletions.
  1. +2 −2 lib/net.js
  2. +41 −0 test/parallel/test-tls-close-event-after-write.js
@@ -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);
@@ -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();
}));
}));

0 comments on commit 9ac8d41

Please sign in to comment.
You can’t perform that action at this time.