@ -5,44 +5,44 @@ var assert = require('assert');
var cluster = require ( 'cluster' ) ;
var cluster = require ( 'cluster' ) ;
var net = require ( 'net' ) ;
var net = require ( 'net' ) ;
var serverClosed = false ;
if ( cluster . isWorker ) {
if ( cluster . isWorker ) {
net . createServer ( function ( socket ) {
var server = net . createServer ( function ( socket ) {
// Wait for any data, then close connection
// Wait for any data, then close connection
socket . write ( '.' ) ;
socket . write ( '.' ) ;
socket . on ( 'data' , function discard ( ) {
socket . on ( 'data' , function discard ( ) { } ) ;
} ) ;
} ) . listen ( common . PORT , common . localhostIPv4 ) ;
} ) . listen ( common . PORT , common . localhostIPv4 ) ;
} else if ( cluster . isMaster ) {
var connectionDone ;
server . once ( 'close' , function ( ) {
var ok ;
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.
var keepOpen = setInterval ( function ( ) { } , 9999 ) ;
// Check worker events and properties
process . once ( 'disconnect' , function ( ) {
// disconnect should occur after socket close
assert ( serverClosed ) ;
clearInterval ( keepOpen ) ;
} ) ;
} else if ( cluster . isMaster ) {
// start worker
// start worker
var worker = cluster . fork ( ) ;
var worker = cluster . fork ( ) ;
var socket ;
// Disconnect worker when it is ready
// Disconnect worker when it is ready
worker . once ( 'listening' , function ( ) {
worker . once ( 'listening' , function ( ) {
net . createConnection ( common . PORT , common . localhostIPv4 , function ( ) {
net . createConnection ( common . PORT , common . localhostIPv4 , function ( ) {
var socket = this ;
socket = this ;
this . on ( 'data' , function ( ) {
this . on ( 'data' , function ( ) {
console . log ( 'got data from client' ) ;
console . log ( 'got data from client' ) ;
// socket definitely connected to worker if we got data
// socket definitely connected to worker if we got data
worker . disconnect ( ) ;
worker . disconnect ( ) ;
setTimeout ( function ( ) {
socket . end ( ) ;
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 ) ;
} ) ;
}
}