Skip to content

Instantly share code, notes, and snippets.

@mbakaitis
Last active July 24, 2023 01:25
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mbakaitis/9422996 to your computer and use it in GitHub Desktop.
Save mbakaitis/9422996 to your computer and use it in GitHub Desktop.
Bad Things: Recursive event listener creation
// a way to recurse through ports until an open port is found
// based upon the Node.js documentation
var http = require('http');
var listenerCounter = 1;
var port = 8000;
var HTTPserver = http.createServer(function (request, response) {
response.writeHead(200);
response.end("hello from server on port: " + port);
});
console.log('trying to Open: ' + port);
HTTPserver
.listen(port, function () {
console.log('we have created ' + listenerCounter + ' http server listeners');
listenerCounter++;
console.log('HTTP listening:' + port);
})
.on('error', function (err) {
if (err.code === 'EADDRINUSE') {
port++;
console.log('Address in use, retrying on port ' + port);
setTimeout(function () {
HTTPserver.listen(port);
}, 250);
}
});
// a VERY bad way to recurse through ports.
// using this will probably result in crashes happening if it has to scan more than three or four ports...
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var listenerCounter = 1;
var errorCounter = 1;
var HTTPserver = http.createServer(function (request, response) {
response.writeHead(200);
response.end("hello from server on port: " + port);
});
var tryToOpenServer = function(port, callerId){
console.log('trying to Open: ' + port);
HTTPserver
.listen(port, function()
{
console.log('we have created ' + listenerCounter + ' http server from caller ' + callerId);
listenerCounter++;
console.log('HTTP listening:' + port);
})
.on('error', function(err)
{
if (err.code === 'EADDRINUSE')
{
// port is currently in use
console.log('server Open error:' + port);
console.log('we have created ' + errorCounter + ' error event handler from ' + callerId);
var thisId = errorCounter;
errorCounter++;
tryToOpenServer(port + 1, thisId);
}
});
};
tryToOpenServer(8000,0);
// when port 8000 and 8001 are busy, we start to see bad things happen as listeners proliferate...
trying to Open: 8000
server Open error:8000
we have created 1 error event handler from 0
trying to Open: 8001
server Open error:8000
we have created 2 error event handler from 0
trying to Open: 8001
server Open error:8001
we have created 3 error event handler from 1
trying to Open: 8002
server Open error:8000
we have created 4 error event handler from 0
trying to Open: 8001
server Open error:8001
we have created 5 error event handler from 1
trying to Open: 8002
server Open error:8001
we have created 6 error event handler from 2
trying to Open: 8002
server Open error:8002
we have created 7 error event handler from 3
trying to Open: 8003
we have created 1 http server from caller 0
HTTP listening:8000
we have created 2 http server from caller 1
HTTP listening:8001
we have created 3 http server from caller 2
HTTP listening:8001
we have created 4 http server from caller 3
HTTP listening:8002
we have created 5 http server from caller 4
HTTP listening:8001
we have created 6 http server from caller 5
HTTP listening:8002
we have created 7 http server from caller 6
HTTP listening:8002
we have created 8 http server from caller 7
HTTP listening:8003
Copy link

ghost commented Jul 23, 2019

Not working in node 12, soo sad :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment