'use strict'; var common = require('../common'); var assert = require('assert'); var cluster = require('cluster'); var net = require('net'); if (cluster.isWorker) { net.createServer(function(socket) { // Wait for any data, then close connection socket.write('.'); socket.on('data', function discard() { }); }).listen(common.PORT, common.localhostIPv4); } else if (cluster.isMaster) { var connectionDone; var ok; // start worker var worker = cluster.fork(); // Disconnect worker when it is ready worker.once('listening', function() { net.createConnection(common.PORT, common.localhostIPv4, function() { var socket = this; this.on('data', function() { console.log('got data from client'); // socket definitely connected to worker if we got data worker.disconnect(); setTimeout(function() { socket.end(); connectionDone = true; }, 1000); }); }); }); // Check worker events and properties worker.once('disconnect', function() { assert.ok(connectionDone, 'disconnect should occur after socket close'); ok = true; }); process.once('exit', function() { assert.ok(ok); }); }