%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
'use strict'; const common = require('../common'); const assert = require('assert'); const cluster = require('cluster'); const net = require('net'); let serverClosed = false; if (cluster.isWorker) { const server = net.createServer(function(socket) { // Wait for any data, then close connection socket.write('.'); socket.on('data', () => {}); }).listen(0, common.localhostIPv4); server.once('close', function() { serverClosed = true; }); // Although not typical, the worker process can exit before the disconnect // event fires. Use this to keep the process open until the event has fired. const keepOpen = setInterval(() => {}, 9999); // Check worker events and properties process.once('disconnect', function() { // Disconnect should occur after socket close assert(serverClosed); clearInterval(keepOpen); }); } else if (cluster.isPrimary) { // start worker const worker = cluster.fork(); // Disconnect worker when it is ready worker.once('listening', function(address) { const socket = net.createConnection(address.port, common.localhostIPv4); socket.on('connect', function() { socket.on('data', function() { console.log('got data from client'); // Socket definitely connected to worker if we got data worker.disconnect(); socket.end(); }); }); }); }