net-utils.js 647 B

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