NodeJS - How to handle "listen EADDRINUSE" when accessing external process

I'm using phantomJS for printing PDF, with phantomjs-node module. It works well but when I try to create several files at once, it throws an Unhandled error "Listen EADDRINUSE.

I assume this is because the module uses phantomJS which is an external process and it can't bind it to the same port several times ?

Anyway, I can't catch this error, and I'd like to resolve this problem at least by avoiding a server crash when this happens. I thought of using a "global" variable, like a locker, in order to block concurrent calls until the current one is finished.

Any idea of how to implement that, or any other solution ?

You should be able to pass in a port number every time you call create:

var phantom = require('phantom');
phantom.create(null, null, function(ph){

},  null, 11111);

You can then use a counter to ensure it's different every time you start phantomjs-node.

If you are starting a new process every time and you can't share a counter then you can use portscanner to find a free port:

var portscanner = require('portscanner');
var phantom = require('phantom');

portscanner.findAPortNotInUse(40000, 60000, 'localhost', function(err, freeport) {
  phantom.create(null, null, function(ph){
    ...
  }
},  null, freeport);

The code from @AndyD is not correct imho. See lines 45 - 54 in

https://github.com/sgentle/phantomjs-node/blob/master/phantom.coffee

So the example should be

var portscanner = require('portscanner');
var phantom = require('phantom');

portscanner.findAPortNotInUse(40000, 60000, 'localhost', function(err, freeport) {
  phantom.create({'port': freeport}, function(ph){
    ...
  }
});