Skip to content

Commit 4bd02d3

Browse files
committed
✨ Add missing keep-alive config options
Signed-off-by: Tomas Dvorak <[email protected]>
1 parent c9e2bb5 commit 4bd02d3

File tree

7 files changed

+36
-9
lines changed

7 files changed

+36
-9
lines changed

src/UltraVNCRepeater.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ export class UltraVNCRepeater extends EventEmitter {
342342
port: this._options.serverPort,
343343
bufferSize: this._options.bufferSize,
344344
socketTimeout: this._options.socketTimeout,
345+
keepAlive: this._options.keepAlive,
345346
},
346347
this._logger,
347348
);
@@ -386,6 +387,7 @@ export class UltraVNCRepeater extends EventEmitter {
386387
port: this._options.clientPort,
387388
bufferSize: this._options.bufferSize,
388389
socketTimeout: this._options.socketTimeout,
390+
keepAlive: this._options.keepAlive,
389391
},
390392
this._logger,
391393
);

src/cli.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ const EnvName = createEnumLowerCase([
1414
"REPEATER_REFUSE",
1515
"REPEATER_LOGFILE",
1616
"REPEATER_LOG_LEVEL",
17+
"REPEATER_SOCKET_TIMEOUT",
18+
"REPEATER_SOCKET_KEEPALIVE",
1719
] as const);
1820

1921
export async function run() {
@@ -82,6 +84,22 @@ export async function run() {
8284
default: getEnv(EnvName.REPEATER_LOG_LEVEL, { type: "string" }),
8385
demandOption: false,
8486
},
87+
socketTimeout: {
88+
describe: `Provide socket timeout in seconds (or use '${EnvName.REPEATER_SOCKET_TIMEOUT}' env)`,
89+
type: "number",
90+
default: getEnv(EnvName.REPEATER_SOCKET_TIMEOUT, {
91+
type: "number",
92+
}),
93+
demandOption: false,
94+
},
95+
keepAlive: {
96+
describe: `Provide keep-alive interval in seconds (or use '${EnvName.REPEATER_SOCKET_KEEPALIVE}' env)`,
97+
type: "number",
98+
default: getEnv(EnvName.REPEATER_SOCKET_KEEPALIVE, {
99+
type: "number",
100+
}),
101+
demandOption: false,
102+
},
85103
})
86104
.parseAsync();
87105

src/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const DefaultServerOptions: VNCRepeaterOptions = {
1111
logger: undefined,
1212
socketTimeout: 30 * 60,
1313
killTimeout: 30,
14+
keepAlive: 10,
1415
} as const;
1516

1617
export const EventInternal = createEnumLowerCase([

src/gateway/BaseGateway.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ export abstract class BaseGateway extends EventEmitter {
1313
protected _logger: Logger;
1414

1515
protected constructor(
16-
protected readonly _options: Pick<VNCRepeaterOptions, "socketTimeout"> & {
16+
protected readonly _options: Pick<
17+
VNCRepeaterOptions,
18+
"socketTimeout" | "keepAlive"
19+
> & {
1720
port: number;
1821
},
1922
logger: Logger,
@@ -30,7 +33,7 @@ export abstract class BaseGateway extends EventEmitter {
3033

3134
this._server = net.createServer(
3235
{
33-
keepAlive: true,
36+
keepAlive: Boolean(this._options.keepAlive),
3437
allowHalfOpen: false,
3538
pauseOnConnect: false,
3639
},
@@ -135,12 +138,14 @@ export abstract class BaseGateway extends EventEmitter {
135138
);
136139
socket.setTimeout(this._options.socketTimeout * 1000);
137140
}
138-
socket.setKeepAlive(true, 1000);
139-
setKeepAliveInterval(socket, 1000);
140-
setKeepAliveProbes(socket, 1);
141+
if (this._options.keepAlive) {
142+
socket.setKeepAlive(true, this._options.keepAlive * 1000);
143+
setKeepAliveInterval(socket, this._options.keepAlive * 1000);
144+
setKeepAliveProbes(socket, 1);
145+
}
141146
socket.on("error", (e) => {
142-
this._logger.error(e, "Socket error");
143-
closeSocket(socket);
147+
this._logger.error(e, "Socket has occurred an error");
148+
closeSocket(socket, true);
144149
});
145150
}
146151

src/gateway/ClientGateway.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export class ClientGateway extends BaseGateway {
1010
constructor(
1111
protected readonly _options: Pick<
1212
VNCRepeaterOptions,
13-
"noRFB" | "bufferSize" | "refuse" | "socketTimeout"
13+
"noRFB" | "bufferSize" | "refuse" | "socketTimeout" | "keepAlive"
1414
> & {
1515
port: number;
1616
},

src/gateway/ServerGateway.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export class ServerGateway extends BaseGateway {
1313
constructor(
1414
protected readonly _options: Pick<
1515
VNCRepeaterOptions,
16-
"bufferSize" | "refuse" | "socketTimeout"
16+
"bufferSize" | "refuse" | "socketTimeout" | "keepAlive"
1717
> & { port: number },
1818
logger: Logger,
1919
) {

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export interface VNCRepeaterOptions {
1212
logger?: Logger;
1313
logLevel?: LogLevel;
1414
socketTimeout?: number;
15+
keepAlive?: number;
1516
killTimeout?: number;
1617
}
1718

0 commit comments

Comments
 (0)