@@ -9,6 +9,7 @@ var connections = 0;
9
9
10
10
var server1listening = false ;
11
11
var server2listening = false ;
12
+ var server2eaddrinuse = false ;
12
13
13
14
var server1 = net . Server ( function ( socket ) {
14
15
connections ++ ;
@@ -21,36 +22,37 @@ var server2 = net.Server(function(socket) {
21
22
} ) ;
22
23
23
24
var server2errors = 0 ;
24
- server2 . on ( 'error' , function ( ) {
25
+
26
+ server2 . on ( 'error' , function ( e ) {
25
27
server2errors ++ ;
26
28
console . error ( 'server2 error' ) ;
29
+
30
+ if ( e . code == 'EADDRINUSE' ) {
31
+ server2eaddrinuse = true ;
32
+ }
33
+
34
+ server2 . listen ( common . PORT + 1 , function ( ) {
35
+ console . error ( 'server2 listening' ) ;
36
+ server2listening = true ;
37
+
38
+ server1 . close ( ) ;
39
+ server2 . close ( ) ;
40
+ } ) ;
27
41
} ) ;
28
42
29
43
30
44
server1 . listen ( common . PORT , function ( ) {
31
45
console . error ( 'server1 listening' ) ;
32
46
server1listening = true ;
47
+
33
48
// This should make server2 emit EADDRINUSE
34
49
server2 . listen ( common . PORT ) ;
35
-
36
- // Wait a bit, now try again.
37
- // TODO, the listen callback should report if there was an error.
38
- // Then we could avoid this very unlikely but potential race condition
39
- // here.
40
- setTimeout ( function ( ) {
41
- server2 . listen ( common . PORT + 1 , function ( ) {
42
- console . error ( 'server2 listening' ) ;
43
- server2listening = true ;
44
-
45
- server1 . close ( ) ;
46
- server2 . close ( ) ;
47
- } ) ;
48
- } , 100 ) ;
49
50
} ) ;
50
51
51
52
52
53
process . on ( 'exit' , function ( ) {
53
54
assert . equal ( 1 , server2errors ) ;
55
+ assert . ok ( server2eaddrinuse ) ;
54
56
assert . ok ( server2listening ) ;
55
57
assert . ok ( server1listening ) ;
56
58
} ) ;
0 commit comments