Skip to content

Commit b57afb5

Browse files
committed
conat/socketio: in dev, detect a running server...
1 parent a9c6ddc commit b57afb5

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/packages/server/conat/socketio/server.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,44 @@ import {
5555
import { getUser, isAllowed } from "./auth";
5656
import { dnsScan, localAddress, SCAN_INTERVAL } from "./dns-scan";
5757
import { handleHealth } from "./health";
58-
import { initMetrics, handleMetrics } from "./metrics";
58+
import { handleMetrics, initMetrics } from "./metrics";
5959

6060
const logger = getLogger("conat-server");
6161

62+
async function checkPortAvailable(port: number): Promise<void> {
63+
return new Promise((resolve, reject) => {
64+
const { createServer } = require("http");
65+
const server = createServer();
66+
67+
server.listen(port, () => {
68+
server.close(() => resolve());
69+
});
70+
71+
server.on("error", (err: any) => {
72+
if (err.code === "EADDRINUSE") {
73+
reject(
74+
new Error(
75+
`Port ${port} is already in use. Another CoCalc server may already be running. Please stop the existing server or use a different port.`,
76+
),
77+
);
78+
} else {
79+
reject(err);
80+
}
81+
});
82+
});
83+
}
84+
6285
export async function init(
6386
options0: Partial<Options> & { kucalc?: boolean } = {},
6487
) {
6588
logger.debug("init");
6689
const { kucalc, ...options } = options0;
6790

91+
// In development mode, check if port is available to prevent multiple servers
92+
if (process.env.NODE_ENV !== "production" && !kucalc) {
93+
await checkPortAvailable(port);
94+
}
95+
6896
if (kucalc) {
6997
}
7098

0 commit comments

Comments
 (0)