network.js 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var net = require("net");
  4. function findClosestOpenPorts(host, ports) {
  5. var promises = ports.map(function (port) { return findClosestOpenPort(host, port); });
  6. return Promise.all(promises);
  7. }
  8. exports.findClosestOpenPorts = findClosestOpenPorts;
  9. function findClosestOpenPort(host, port) {
  10. function t(portToCheck) {
  11. return isPortTaken(host, portToCheck).then(function (isTaken) {
  12. if (!isTaken) {
  13. return portToCheck;
  14. }
  15. return t(portToCheck + 1);
  16. });
  17. }
  18. return t(port);
  19. }
  20. exports.findClosestOpenPort = findClosestOpenPort;
  21. function isPortTaken(host, port) {
  22. return new Promise(function (resolve, reject) {
  23. var tester = net.createServer()
  24. .once('error', function (err) {
  25. if (err.code !== 'EADDRINUSE') {
  26. return resolve(true);
  27. }
  28. resolve(true);
  29. })
  30. .once('listening', function () {
  31. tester.once('close', function () {
  32. resolve(false);
  33. })
  34. .close();
  35. })
  36. .listen(port, host);
  37. });
  38. }
  39. exports.isPortTaken = isPortTaken;