src/goDebugFactory: let startAndConnectToServer return a socket
Updates golang/vscode-go#124
Change-Id: I758dc93c25f212f41ad729cce97f75a2568f08fc
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/358515
Trust: Hyang-Ah Hana Kim <hyangah@gmail.com>
Reviewed-by: Suzy Mueller <suzmue@golang.org>
diff --git a/src/goDebugFactory.ts b/src/goDebugFactory.ts
index 7b44929..4ab4fb7 100644
--- a/src/goDebugFactory.ts
+++ b/src/goDebugFactory.ts
@@ -299,7 +299,7 @@
private async startAndConnectToServer() {
try {
- const { port, host, dlvDapServer } = await startDapServer(
+ const { dlvDapServer, socket } = await startDapServer(
this.configuration,
(msg) => this.outputEvent('stdout', msg),
(msg) => this.outputEvent('stderr', msg),
@@ -312,21 +312,8 @@
this.logger?.info(msg);
}
);
- const socket = await new Promise<net.Socket>((resolve, reject) => {
- // eslint-disable-next-line prefer-const
- let timer: NodeJS.Timeout;
- const s = net.createConnection(port, host, () => {
- clearTimeout(timer);
- resolve(s);
- });
- timer = setTimeout(() => {
- reject('connection timeout');
- s?.destroy();
- }, 1000);
- });
this.dlvDapServer = dlvDapServer;
- this.port = port;
this.socket = socket;
this.start(this.socket, this.socket);
} catch (err) {
@@ -346,17 +333,30 @@
log: (msg: string) => void,
logErr: (msg: string) => void,
logConsole: (msg: string) => void
-): Promise<{ port: number; host: string; dlvDapServer?: ChildProcessWithoutNullStreams }> {
+): Promise<{ dlvDapServer?: ChildProcessWithoutNullStreams; socket: net.Socket }> {
const host = configuration.host || '127.0.0.1';
+ const port = configuration.port || (await getPort());
- if (configuration.port) {
- // If a port has been specified, assume there is an already
- // running dap server to connect to.
- return { port: configuration.port, host };
- }
- const port = await getPort();
- const dlvDapServer = await spawnDlvDapServerProcess(configuration, host, port, log, logErr, logConsole);
- return { dlvDapServer, port, host };
+ // If a port has been specified, assume there is an already
+ // running dap server to connect to. Otherwise, we start the dlv dap server.
+ const dlvDapServer = configuration.port
+ ? undefined
+ : await spawnDlvDapServerProcess(configuration, host, port, log, logErr, logConsole);
+
+ const socket = await new Promise<net.Socket>((resolve, reject) => {
+ // eslint-disable-next-line prefer-const
+ let timer: NodeJS.Timeout;
+ const s = net.createConnection(port, host, () => {
+ clearTimeout(timer);
+ resolve(s);
+ });
+ timer = setTimeout(() => {
+ reject('connection timeout');
+ s?.destroy();
+ }, 1000);
+ });
+
+ return { dlvDapServer, socket };
}
function spawnDlvDapServerProcess(