File tree 3 files changed +62
-0
lines changed
3 files changed +62
-0
lines changed Original file line number Diff line number Diff line change @@ -281,6 +281,23 @@ added: v0.1.90
281
281
282
282
Emitted when the server has been bound after calling [ ` server.listen() ` ] [ ] .
283
283
284
+ ### Event: ` 'drop' `
285
+
286
+ <!-- YAML
287
+ added: REPLACEME
288
+ -->
289
+
290
+ When the number of connections reaches the threshold of ` server.maxConnections ` ,
291
+ the server will drop new connections and emit ` 'drop' ` event instead. If it is a
292
+ TCP server, the argument is as follows, otherwise the argument is ` undefined ` .
293
+
294
+ * ` data ` {Object} The argument passed to event listener.
295
+ * ` localAddress ` {string} Local address.
296
+ * ` localPort ` {number} Local port.
297
+ * ` remoteAddress ` {string} Remote address.
298
+ * ` remotePort ` {number} Remote port.
299
+ * ` remoteFamily ` {string} Remote IP family. ` 'IPv4' ` or ` 'IPv6' ` .
300
+
284
301
### ` server.address() `
285
302
286
303
<!-- YAML
Original file line number Diff line number Diff line change @@ -1647,6 +1647,25 @@ function onconnection(err, clientHandle) {
1647
1647
}
1648
1648
1649
1649
if ( self . maxConnections && self . _connections >= self . maxConnections ) {
1650
+ if ( clientHandle . getsockname || clientHandle . getpeername ) {
1651
+ const data = { } ;
1652
+ if ( clientHandle . getsockname ) {
1653
+ const localInfo = { } ;
1654
+ clientHandle . getsockname ( localInfo ) ;
1655
+ data . localAddress = localInfo . address ;
1656
+ data . localPort = localInfo . port ;
1657
+ }
1658
+ if ( clientHandle . getpeername ) {
1659
+ const remoteInfo = { } ;
1660
+ clientHandle . getpeername ( remoteInfo ) ;
1661
+ data . remoteAddress = remoteInfo . address ;
1662
+ data . remotePort = remoteInfo . port ;
1663
+ data . remoteFamily = remoteInfo . family ;
1664
+ }
1665
+ self . emit ( 'drop' , data ) ;
1666
+ } else {
1667
+ self . emit ( 'drop' ) ;
1668
+ }
1650
1669
clientHandle . close ( ) ;
1651
1670
return ;
1652
1671
}
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+ const common = require ( '../common' ) ;
3
+ const assert = require ( 'assert' ) ;
4
+ const net = require ( 'net' ) ;
5
+
6
+ let firstSocket ;
7
+ const server = net . createServer ( common . mustCall ( ( socket ) => {
8
+ firstSocket = socket ;
9
+ } ) ) ;
10
+
11
+ server . maxConnections = 1 ;
12
+
13
+ server . on ( 'drop' , common . mustCall ( ( data ) => {
14
+ assert . strictEqual ( ! ! data . localAddress , true ) ;
15
+ assert . strictEqual ( ! ! data . localPort , true ) ;
16
+ assert . strictEqual ( ! ! data . remoteAddress , true ) ;
17
+ assert . strictEqual ( ! ! data . remotePort , true ) ;
18
+ assert . strictEqual ( ! ! data . remoteFamily , true ) ;
19
+ firstSocket . destroy ( ) ;
20
+ server . close ( ) ;
21
+ } ) ) ;
22
+
23
+ server . listen ( 0 , ( ) => {
24
+ net . createConnection ( server . address ( ) . port ) ;
25
+ net . createConnection ( server . address ( ) . port ) ;
26
+ } ) ;
You can’t perform that action at this time.
0 commit comments