Skip to content

Instantly share code, notes, and snippets.

@matthewadams
Last active January 3, 2020 16:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matthewadams/ef16b8dd5931618adba8c3873698a8a1 to your computer and use it in GitHub Desktop.
Save matthewadams/ef16b8dd5931618adba8c3873698a8a1 to your computer and use it in GitHub Desktop.
// stolen from https://gist.github.com/mikeal/1840641#gistcomment-3126524
import { createServer } from 'net'
export default function getPort (port = 80, maxPort = 65535) {
if ((maxPort = parseInt(maxPort)) < (port = parseInt(port)) || isNaN(port) || isNaN(maxPort) || port < 0 || port > 65535 || maxPort < 0 || maxPort > 65535) {
return Promise.reject((() => {
const e = new Error('EPORTSPEC')
e.code = e.message
return e
})())
}
const server = createServer()
return new Promise((resolve, reject) => server
.once('error', error => error.code !== 'EADDRINUSE' || ++port > maxPort ? reject(error) : server.listen(port))
.once('listening', () => server.close(() => resolve(port)))
.listen(port)
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment