diff --git a/doc/api/net.md b/doc/api/net.md index a7b6eff6008136..0bce91d9ff67b7 100644 --- a/doc/api/net.md +++ b/doc/api/net.md @@ -83,6 +83,11 @@ event is not emitted until all connections are ended. ### Event: `'connection'` * {net.Socket} The connection object diff --git a/lib/net.js b/lib/net.js index ee0ffebe0ec45e..c6c4433cf642e3 100644 --- a/lib/net.js +++ b/lib/net.js @@ -1536,6 +1536,11 @@ function onconnection(err, clientHandle) { return; } + if (self.listenerCount('connection') === 0) { + clientHandle.close(); + return; + } + if (self.maxConnections && self._connections >= self.maxConnections) { clientHandle.close(); return; diff --git a/test/parallel/test-net-server-no-handler.js b/test/parallel/test-net-server-no-handler.js new file mode 100644 index 00000000000000..d27b19b7e3fd67 --- /dev/null +++ b/test/parallel/test-net-server-no-handler.js @@ -0,0 +1,12 @@ +// Ensure that a net.Server without 'connection' event listeners closes +// incoming connections rather than accepting, then forgetting about them. + +'use strict'; +const common = require('../common'); +const net = require('net'); + +net.createServer(common.mustCall()).listen(function() { + const server = this; + const { address: host, port } = server.address(); + net.connect(port, host).once('end', () => server.close()); +}); diff --git a/test/parallel/test-net-socket-timeout.js b/test/parallel/test-net-socket-timeout.js index 8b197b44d61281..6e1cd06af412f1 100644 --- a/test/parallel/test-net-socket-timeout.js +++ b/test/parallel/test-net-socket-timeout.js @@ -67,7 +67,7 @@ for (let i = 0; i < invalidCallbacks.length; i++) { ); } -const server = net.Server(); +const server = net.Server((conn) => { /* do nothing */ }); server.listen(0, common.mustCall(() => { const socket = net.createConnection(server.address().port); socket.setTimeout(1, common.mustCall(() => {