@@ -30,8 +30,14 @@ if (process.argv[2] === 'child') {
30
30
var id = process . argv [ 3 ] ;
31
31
32
32
process . on ( 'message' , function ( m , socket ) {
33
- if ( socket ) {
33
+ if ( m . cmd === 'new' ) {
34
+ assert ( socket ) ;
35
+ assert ( socket instanceof net . Socket , 'should be a net.Socket' ) ;
34
36
sockets . push ( socket ) ;
37
+ socket . on ( 'end' , function ( ) {
38
+ if ( ! this . closingOnPurpose )
39
+ throw new Error ( '[c] closing by accident! ' + process . _errno ) ;
40
+ } ) ;
35
41
}
36
42
37
43
if ( m . cmd === 'close' ) {
@@ -42,9 +48,15 @@ if (process.argv[2] === 'child') {
42
48
sockets [ m . id ] . destroy ( ) ;
43
49
}
44
50
} ) ;
51
+
45
52
} else {
46
53
var child = fork ( process . argv [ 1 ] , [ 'child' ] ) ;
47
54
55
+ child . on ( 'exit' , function ( code , signal ) {
56
+ if ( ! childKilled )
57
+ throw new Error ( 'child died unexpectedly!' ) ;
58
+ } ) ;
59
+
48
60
var server = net . createServer ( ) ;
49
61
var sockets = [ ] ;
50
62
var sent = 0 ;
@@ -55,29 +67,31 @@ if (process.argv[2] === 'child') {
55
67
56
68
if ( sockets . length === count ) {
57
69
closeSockets ( 0 ) ;
58
- server . close ( ) ;
59
70
}
60
71
} ) ;
61
72
62
73
var disconnected = 0 ;
74
+ var clients = [ ] ;
63
75
server . on ( 'listening' , function ( ) {
64
-
65
76
var j = count , client ;
66
77
while ( j -- ) {
67
78
client = net . connect ( common . PORT , '127.0.0.1' ) ;
79
+ client . id = j ;
68
80
client . on ( 'close' , function ( ) {
69
- console . error ( '[m] CLIENT: close event' ) ;
70
81
disconnected += 1 ;
71
82
} ) ;
72
- // XXX This resume() should be unnecessary.
73
- // a stream high water mark should be enough to keep
74
- // consuming the input.
75
- client . resume ( ) ;
83
+ clients . push ( client ) ;
76
84
}
77
85
} ) ;
78
86
87
+ var childKilled = false ;
79
88
function closeSockets ( i ) {
80
- if ( i === count ) return ;
89
+ if ( i === count ) {
90
+ childKilled = true ;
91
+ server . close ( ) ;
92
+ child . kill ( ) ;
93
+ return ;
94
+ }
81
95
82
96
sent ++ ;
83
97
child . send ( { id : i , cmd : 'close' } ) ;
@@ -91,10 +105,7 @@ if (process.argv[2] === 'child') {
91
105
92
106
var closeEmitted = false ;
93
107
server . on ( 'close' , function ( ) {
94
- console . error ( '[m] server close' ) ;
95
108
closeEmitted = true ;
96
-
97
- child . kill ( ) ;
98
109
} ) ;
99
110
100
111
server . listen ( common . PORT , '127.0.0.1' ) ;
@@ -103,5 +114,6 @@ if (process.argv[2] === 'child') {
103
114
assert . equal ( sent , count ) ;
104
115
assert . equal ( disconnected , count ) ;
105
116
assert . ok ( closeEmitted ) ;
117
+ console . log ( 'ok' ) ;
106
118
} ) ;
107
119
}
0 commit comments