mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
check port checker response
Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
parent
03aab714d8
commit
e2b581881c
@ -1,14 +1,21 @@
|
|||||||
import logger from "./logger"
|
import logger from "./logger"
|
||||||
import { createServer } from "net"
|
import { createServer, Server, IncomingMessage, ServerResponse } from "http"
|
||||||
|
import * as request from "request-promise-native"
|
||||||
|
|
||||||
// Adapted from https://gist.github.com/mikeal/1840641#gistcomment-2896667
|
// Adapted from https://gist.github.com/mikeal/1840641#gistcomment-2896667
|
||||||
function checkPort(port: number) {
|
function checkPort(port: number) {
|
||||||
const server = createServer()
|
let server: Server = null
|
||||||
|
const checkPortHandler = (req: IncomingMessage, res: ServerResponse) => {
|
||||||
|
res.writeHead(200)
|
||||||
|
res.end("lens-port-checker")
|
||||||
|
server.close()
|
||||||
|
}
|
||||||
|
server = createServer(checkPortHandler)
|
||||||
server.unref()
|
server.unref()
|
||||||
return new Promise((resolve, reject) =>
|
return new Promise((resolve, reject) =>
|
||||||
server
|
server
|
||||||
.on('error', error => reject(error))
|
.on('error', error => reject(error))
|
||||||
.on('listening', () => server.close(() => resolve(port)))
|
.on('listening', () => resolve(port))
|
||||||
.listen({host: "127.0.0.1", port: port}))
|
.listen({host: "127.0.0.1", port: port}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,6 +26,14 @@ export async function getFreePort(firstPort: number, lastPort: number): Promise<
|
|||||||
try {
|
try {
|
||||||
logger.debug("Checking port " + port + " availability ...")
|
logger.debug("Checking port " + port + " availability ...")
|
||||||
await checkPort(port)
|
await checkPort(port)
|
||||||
|
const resp = await request(`http://127.0.0.1:${port}`, {
|
||||||
|
timeout: 1000,
|
||||||
|
resolveWithFullResponse: true
|
||||||
|
})
|
||||||
|
if (resp.body !== "lens-port-checker") {
|
||||||
|
logger.debug(`Invalid response from ${port}, probably some other process is listening on all interfaces`)
|
||||||
|
throw new Error("invalid response")
|
||||||
|
}
|
||||||
return(port)
|
return(port)
|
||||||
} catch(error) {
|
} catch(error) {
|
||||||
if(++port > lastPort) throw("Could not find a free port")
|
if(++port > lastPort) throw("Could not find a free port")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user