Check if server is already listening

Summary:
Right now, this simply avoids trying to create a server instance if one appears to be already running.

In a future change, we may decide to kill the existing instance and replace it with a new one.

But, in this case, running this as is will be useful as it will provide the connection URL with the auth token.

Also remove flipper server dependency from finding installation. In this case, we don't need it and can use `os.getPlatform()` instead.

Reviewed By: antonk52

Differential Revision: D46144843

fbshipit-source-id: 2922843b916d37e0126e43ae65a622f87a6920ec
This commit is contained in:
Lorenzo Blasa
2023-05-24 06:50:05 -07:00
committed by Facebook GitHub Bot
parent 5441494376
commit 4704c177ec
3 changed files with 61 additions and 24 deletions

View File

@@ -12,6 +12,34 @@ import xdgBasedir from 'xdg-basedir';
import net from 'net';
import fs from 'fs-extra';
/**
* Checks if a port is in use.
* @param port The port to check.
* @returns True if the port is in use. Otherwise, false.
*/
export async function checkPortInUse(port: number): Promise<boolean> {
interface HttpError extends Error {
code?: string;
}
return new Promise((resolve, reject) => {
const tester = net
.createServer()
.once('error', function (err: HttpError) {
if (err.code != 'EADDRINUSE') return reject(err);
resolve(true);
})
.once('listening', function () {
tester
.once('close', function () {
resolve(false);
})
.close();
})
.listen(port);
});
}
/**
* Checks if a socket is in used for given path.
* If the path doesn't exist then is not in use. If it does,