net-utils.js 683 B

12345678910111213141516171819202122232425262728
  1. 'use strict'
  2. const Promise = require('bluebird')
  3. const net = require('net')
  4. const NetUtils = {
  5. bindAvailablePort (port, listenAddress) {
  6. return new Promise((resolve, reject) => {
  7. const server = net.createServer()
  8. server
  9. .on('error', (err) => {
  10. server.close()
  11. if (err.code === 'EADDRINUSE' || err.code === 'EACCES') {
  12. server.listen(++port, listenAddress)
  13. } else {
  14. reject(new Error(`Failed to bind ${port}: ` + (err.stack || err)))
  15. }
  16. })
  17. .on('listening', () => {
  18. resolve(server)
  19. })
  20. .listen(port, listenAddress)
  21. })
  22. }
  23. }
  24. module.exports = NetUtils