@@ -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
}
0 commit comments