diff --git a/src/main/modules/openApi/index.ts b/src/main/modules/openApi/index.ts index e58a7baa..98b7db13 100644 --- a/src/main/modules/openApi/index.ts +++ b/src/main/modules/openApi/index.ts @@ -1,4 +1,5 @@ import http from 'node:http' +import type { Socket } from 'node:net' let status: LX.OpenAPI.Status = { status: false, @@ -7,6 +8,7 @@ let status: LX.OpenAPI.Status = { } let httpServer: http.Server +let sockets = new Set() const handleStartServer = async(port = 9000, ip = '127.0.0.1') => new Promise((resolve, reject) => { httpServer = http.createServer((req, res) => { @@ -47,6 +49,13 @@ const handleStartServer = async(port = 9000, ip = '127.0.0.1') => new Promise { + sockets.add(socket) + socket.once('close', () => { + sockets.delete(socket) + }) + socket.setTimeout(4000) + }) httpServer.on('listening', () => { const addr = httpServer.address() @@ -69,6 +78,8 @@ const handleStopServer = async() => new Promise((resolve, reject) => { } resolve() }) + for (const socket of sockets) socket.destroy() + sockets.clear() }) diff --git a/src/main/modules/sync/server/server/server.ts b/src/main/modules/sync/server/server/server.ts index e757fe60..037cc592 100644 --- a/src/main/modules/sync/server/server/server.ts +++ b/src/main/modules/sync/server/server/server.ts @@ -10,6 +10,7 @@ import log from '../../log' import { sendServerStatus } from '@main/modules/winMain' import { decryptMsg, encryptMsg, generateCode as handleGenerateCode } from '../utils/tools' import migrateData from '../../migrate' +import type { Socket } from 'node:net' let status: LX.Sync.ServerStatus = { @@ -114,6 +115,7 @@ const authConnection = (req: http.IncomingMessage, callback: (err: string | null let wss: LX.Sync.Server.SocketServer | null let httpServer: http.Server +let sockets = new Set() function noop() {} function onSocketError(err: Error) { @@ -290,6 +292,12 @@ const handleStartServer = async(port = 9527, ip = '0.0.0.0') => await new Promis console.log(error) reject(error) }) + httpServer.on('connection', (socket) => { + sockets.add(socket) + socket.once('close', () => { + sockets.delete(socket) + }) + }) httpServer.on('listening', () => { const addr = httpServer.address() @@ -321,6 +329,8 @@ const handleStopServer = async() => new Promise((resolve, reject) => { } resolve() }) + for (const socket of sockets) socket.destroy() + sockets.clear() }) export const stopServer = async() => {