From 6e72f34f1a48bb4d9ea0ff7fbc9aa31ce38e624f Mon Sep 17 00:00:00 2001 From: Leif Walsh Date: Fri, 8 Oct 2021 19:01:10 +0000 Subject: [PATCH 1/2] add option to listen on unix domain socket This adds a CLI argument --socket, that takes a path. The server will bind this path instead of a TCP port. closes #144 --- src/vs/server/node/server.main.ts | 45 ++++++++++++++++++------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/vs/server/node/server.main.ts b/src/vs/server/node/server.main.ts index 000575d989bba..b4247c4554c69 100644 --- a/src/vs/server/node/server.main.ts +++ b/src/vs/server/node/server.main.ts @@ -302,11 +302,13 @@ async function handleFetchCallback(req: http.IncomingMessage, res: http.ServerRe interface ServerParsedArgs extends NativeParsedArgs { port?: string host?: string + socket?: string } const SERVER_OPTIONS: OptionDescriptions = { ...OPTIONS, port: { type: 'string' }, - host: { type: 'string' } + host: { type: 'string' }, + socket: { type: 'string' } }; export interface IStartServerResult { @@ -1008,25 +1010,30 @@ export async function main(options: IServerOptions): Promise { }); }); - let port = 3000; - if (parsedArgs.port) { - port = Number(parsedArgs.port); - } else if (typeof options.port === 'number') { - port = options.port; - } - - const host = parsedArgs.host || '0.0.0.0'; - server.on('error', () => { - server.close(); - process.exit(1); - }); + if (parsedArgs.socket) { + server.listen(parsedArgs.socket, () => { + logService.info(`Server listening on ${parsedArgs.socket}`); + }); + } else { + let port = 3000; + if (parsedArgs.port) { + port = Number(parsedArgs.port); + } else if (typeof options.port === 'number') { + port = options.port; + } - server.listen(port, host, () => { - const addressInfo = server.address() as net.AddressInfo; - const address = addressInfo.address === '0.0.0.0' || addressInfo.address === '127.0.0.1' ? 'localhost' : addressInfo.address; - const formattedPort = addressInfo.port === 80 ? '' : String(addressInfo.port); - logService.info(`Web UI available at http://${address}:${formattedPort}`); - }); + const host = parsedArgs.host || '0.0.0.0'; + server.on('error', () => { + server.close(); + process.exit(1); + }); + server.listen(port, host, () => { + const addressInfo = server.address() as net.AddressInfo; + const address = addressInfo.address === '0.0.0.0' || addressInfo.address === '127.0.0.1' ? 'localhost' : addressInfo.address; + const formattedPort = addressInfo.port === 80 ? '' : String(addressInfo.port); + logService.info(`Web UI available at http://${address}:${formattedPort}`); + }); + } }); } From edadd76f55d2ce34d7236e1061c80cc7e5cdc428 Mon Sep 17 00:00:00 2001 From: Leif Walsh Date: Fri, 8 Oct 2021 19:02:54 +0000 Subject: [PATCH 2/2] clean up server on exit regardless of address family --- src/vs/server/node/server.main.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/vs/server/node/server.main.ts b/src/vs/server/node/server.main.ts index b4247c4554c69..e3f522104a815 100644 --- a/src/vs/server/node/server.main.ts +++ b/src/vs/server/node/server.main.ts @@ -1010,6 +1010,11 @@ export async function main(options: IServerOptions): Promise { }); }); + server.on('error', () => { + server.close(); + process.exit(1); + }); + if (parsedArgs.socket) { server.listen(parsedArgs.socket, () => { logService.info(`Server listening on ${parsedArgs.socket}`); @@ -1023,10 +1028,6 @@ export async function main(options: IServerOptions): Promise { } const host = parsedArgs.host || '0.0.0.0'; - server.on('error', () => { - server.close(); - process.exit(1); - }); server.listen(port, host, () => { const addressInfo = server.address() as net.AddressInfo; const address = addressInfo.address === '0.0.0.0' || addressInfo.address === '127.0.0.1' ? 'localhost' : addressInfo.address;