| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 8ea7660 commit 909b516
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -5,44 +5,44 @@ var assert = require('assert'); | |||
| 5 | 5 | var cluster = require('cluster'); | |
| 6 | 6 | var net = require('net'); | |
| 7 | 7 | ||
| 8 | + var serverClosed = false; | ||
| 9 | + | ||
| 8 | 10 | if (cluster.isWorker) { | |
| 9 | - net.createServer(function(socket) { | ||
| 11 | + var server = net.createServer(function(socket) { | ||
| 10 | 12 | // Wait for any data, then close connection | |
| 11 | 13 | socket.write('.'); | |
| 12 | - socket.on('data', function discard() { | ||
| 13 | - }); | ||
| 14 | + socket.on('data', function discard() {}); | ||
| 14 | 15 | }).listen(common.PORT, common.localhostIPv4); | |
| 15 | - } else if (cluster.isMaster) { | ||
| 16 | 16 | ||
| 17 | - var connectionDone; | ||
| 18 | - var ok; | ||
| 17 | + server.once('close', function() { | ||
| 18 | + serverClosed = true; | ||
| 19 | + }); | ||
| 19 | 20 | ||
| 21 | + // Although not typical, the worker process can exit before the disconnect | ||
| 22 | + // event fires. Use this to keep the process open until the event has fired. | ||
| 23 | + var keepOpen = setInterval(function() {}, 9999); | ||
| 24 | + | ||
| 25 | + // Check worker events and properties | ||
| 26 | + process.once('disconnect', function() { | ||
| 27 | + // disconnect should occur after socket close | ||
| 28 | + assert(serverClosed); | ||
| 29 | + clearInterval(keepOpen); | ||
| 30 | + }); | ||
| 31 | + } else if (cluster.isMaster) { | ||
| 20 | 32 | // start worker | |
| 21 | 33 | var worker = cluster.fork(); | |
| 22 | 34 | ||
| 35 | + var socket; | ||
| 23 | 36 | // Disconnect worker when it is ready | |
| 24 | 37 | worker.once('listening', function() { | |
| 25 | 38 | net.createConnection(common.PORT, common.localhostIPv4, function() { | |
| 26 | - var socket = this; | ||
| 39 | + socket = this; | ||
| 27 | 40 | this.on('data', function() { | |
| 28 | 41 | console.log('got data from client'); | |
| 29 | 42 | // socket definitely connected to worker if we got data | |
| 30 | 43 | worker.disconnect(); | |
| 31 | - setTimeout(function() { | ||
| 32 | - socket.end(); | ||
| 33 | - connectionDone = true; | ||
| 34 | - }, 1000); | ||
| 44 | + socket.end(); | ||
| 35 | 45 | }); | |
| 36 | 46 | }); | |
| 37 | 47 | }); | |
| 38 | - | ||
| 39 | - // Check worker events and properties | ||
| 40 | - worker.once('disconnect', function() { | ||
| 41 | - assert.ok(connectionDone, 'disconnect should occur after socket close'); | ||
| 42 | - ok = true; | ||
| 43 | - }); | ||
| 44 | - | ||
| 45 | - process.once('exit', function() { | ||
| 46 | - assert.ok(ok); | ||
| 47 | - }); | ||
| 48 | 48 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments