this.server = options.server;
- // Move the server to TLSSocket, otherwise both `socket.destroy()` and
- // `TLSSocket.destroy()` will decrement number of connections of the TLS
- // server, leading to misfiring `server.close()` callback
- if (socket && socket.server === this.server)
- socket.server = null;
-
// For clients, we will always have either a given ca list or be using
// default one
const requestCert = !!options.requestCert || !options.isServer;
this.read(0);
}
}
+
+ // Reserve properties
+ this.server = null;
+ this._server = null;
}
util.inherits(Socket, stream.Duplex);
this.destroyed = true;
fireErrorCallbacks();
- if (this.server) {
+ if (this._server) {
COUNTER_NET_SERVER_CONNECTION_CLOSE(this);
debug('has server');
- this.server._connections--;
- if (this.server._emitCloseIfDrained) {
- this.server._emitCloseIfDrained();
+ this._server._connections--;
+ if (this._server._emitCloseIfDrained) {
+ this._server._emitCloseIfDrained();
}
}
};
self._connections++;
socket.server = self;
+ socket._server = self;
DTRACE_NET_SERVER_CONNECTION(socket);
LTTNG_NET_SERVER_CONNECTION(socket);
s.server = new net.Server();
s.server.connections = 10;
+s._server = s.server;
assert.equal(10, s.server.connections);
s.destroy();
--- /dev/null
+'use strict';
+const common = require('../common');
+
+if (!common.hasCrypto) {
+ console.log('1..0 # Skipped: missing crypto');
+ return;
+}
+
+const assert = require('assert');
+const tls = require('tls');
+const fs = require('fs');
+
+const options = {
+ key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'),
+ cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem')
+};
+
+const server = tls.createServer(options, function(s) {
+ s.end('hello');
+}).listen(common.PORT, function() {
+ const opts = {
+ port: common.PORT,
+ rejectUnauthorized: false
+ };
+
+ server.on('connection', common.mustCall(function(socket) {
+ assert(socket.server === server);
+ server.close();
+ }));
+
+ const client = tls.connect(opts, function() {
+ client.end();
+ });
+});