@@ -14,17 +14,22 @@ const getMultiaddr = require('./get-multiaddr')
14
14
15
15
const IPFS_CODE = 421
16
16
const CLOSE_TIMEOUT = 2000
17
+ function noop ( ) { }
17
18
18
19
module . exports = ( handler ) => {
19
20
const listener = new EventEmitter ( )
20
21
21
22
const server = net . createServer ( ( socket ) => {
23
+ // Avoid uncaught errors cause by unstable connections
24
+ socket . on ( 'error' , noop )
25
+
22
26
const addr = getMultiaddr ( socket )
23
27
log ( 'new connection' , addr . toString ( ) )
24
28
25
29
const s = toPull . duplex ( socket )
30
+
26
31
s . getObservedAddrs = ( cb ) => {
27
- return cb ( null , [ addr ] )
32
+ cb ( null , [ addr ] )
28
33
}
29
34
30
35
trackSocket ( server , socket )
@@ -34,36 +39,31 @@ module.exports = (handler) => {
34
39
listener . emit ( 'connection' , conn )
35
40
} )
36
41
37
- server . on ( 'listening' , ( ) => {
38
- listener . emit ( 'listening' )
39
- } )
40
-
41
- server . on ( 'error' , ( err ) => {
42
- listener . emit ( 'error' , err )
43
- } )
44
-
45
- server . on ( 'close' , ( ) => {
46
- listener . emit ( 'close' )
47
- } )
42
+ server . on ( 'listening' , ( ) => listener . emit ( 'listening' ) )
43
+ server . on ( 'error' , ( err ) => listener . emit ( 'error' , err ) )
44
+ server . on ( 'close' , ( ) => listener . emit ( 'close' ) )
48
45
49
46
// Keep track of open connections to destroy in case of timeout
50
47
server . __connections = { }
51
48
52
- listener . close = ( options , cb ) => {
49
+ listener . close = ( options , callback ) => {
53
50
if ( typeof options === 'function' ) {
54
- cb = options
51
+ callback = options
55
52
options = { }
56
53
}
57
- cb = cb || ( ( ) => { } )
54
+ callback = callback || noop
58
55
options = options || { }
59
56
60
57
let closed = false
61
- server . close ( cb )
58
+ server . close ( callback )
59
+
62
60
server . once ( 'close' , ( ) => {
63
61
closed = true
64
62
} )
65
63
setTimeout ( ( ) => {
66
- if ( closed ) return
64
+ if ( closed ) {
65
+ return
66
+ }
67
67
68
68
log ( 'unable to close graciously, destroying conns' )
69
69
Object . keys ( server . __connections ) . forEach ( ( key ) => {
@@ -76,7 +76,7 @@ module.exports = (handler) => {
76
76
let ipfsId
77
77
let listeningAddr
78
78
79
- listener . listen = ( ma , cb ) => {
79
+ listener . listen = ( ma , callback ) => {
80
80
listeningAddr = ma
81
81
if ( includes ( ma . protoNames ( ) , 'ipfs' ) ) {
82
82
ipfsId = getIpfsId ( ma )
@@ -85,15 +85,15 @@ module.exports = (handler) => {
85
85
86
86
const lOpts = listeningAddr . toOptions ( )
87
87
log ( 'Listening on %s %s' , lOpts . port , lOpts . host )
88
- return server . listen ( lOpts . port , lOpts . host , cb )
88
+ return server . listen ( lOpts . port , lOpts . host , callback )
89
89
}
90
90
91
- listener . getAddrs = ( cb ) => {
91
+ listener . getAddrs = ( callback ) => {
92
92
const multiaddrs = [ ]
93
93
const address = server . address ( )
94
94
95
95
if ( ! address ) {
96
- return cb ( new Error ( 'Listener is not ready yet' ) )
96
+ return callback ( new Error ( 'Listener is not ready yet' ) )
97
97
}
98
98
99
99
// Because TCP will only return the IPv6 version
@@ -128,7 +128,7 @@ module.exports = (handler) => {
128
128
multiaddrs . push ( ma )
129
129
}
130
130
131
- cb ( null , multiaddrs )
131
+ callback ( null , multiaddrs )
132
132
}
133
133
134
134
return listener
0 commit comments