Add ref() and unref() stub methods to the faux handle in round-robin
mode. Fixes the following TypeError when calling `server.unref()` in
the worker:
net.js:1521
this._handle.unref();
^
TypeError: this._handle.unref is not a function
at Server.unref (net.js:1521:18)
No actual reference counting is implemented. It would effectively be
a no-op because the control channel would still keep the worker alive.
Fixes: https://github.com/nodejs/node/issues/73
PR-URL: https://github.com/nodejs/io.js/pull/2274
Reviewed-By: Evan Lucas <evanlucas@me.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
return 0;
}
+ // XXX(bnoordhuis) Probably no point in implementing ref() and unref()
+ // because the control channel is going to keep the worker alive anyway.
+ function ref() {
+ }
+
+ function unref() {
+ }
+
// Faux handle. Mimics a TCPWrap with just enough fidelity to get away
// with it. Fools net.Server into thinking that it's backed by a real
// handle.
var handle = {
close: close,
- listen: listen
+ listen: listen,
+ ref: ref,
+ unref: unref,
};
if (message.sockname) {
handle.getsockname = getsockname; // TCP handles only.
--- /dev/null
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+const cluster = require('cluster');
+const net = require('net');
+
+if (cluster.isMaster) {
+ cluster.fork().on('message', function(msg) {
+ if (msg === 'done') this.kill();
+ });
+} else {
+ const server = net.createServer(assert.fail);
+ server.listen(common.PORT, function() {
+ server.unref();
+ server.ref();
+ server.close(function() {
+ process.send('done');
+ });
+ });
+}