feat(core): Add heartbeat grace/timeout options, client retry/wait-for-ready, server readiness and socket cleanup, transport socket options, helper utilities, and tests
This commit is contained in:
@@ -34,6 +34,10 @@ export interface IIpcTransportOptions {
|
||||
noDelay?: boolean;
|
||||
/** Maximum message size in bytes (default: 8MB) */
|
||||
maxMessageSize?: number;
|
||||
/** Automatically cleanup stale socket file on start (default: false) */
|
||||
autoCleanupSocketFile?: boolean;
|
||||
/** Socket file permissions mode (e.g. 0o600) */
|
||||
socketMode?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -206,11 +210,13 @@ export class UnixSocketTransport extends IpcTransport {
|
||||
*/
|
||||
private async startServer(socketPath: string): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
// Clean up stale socket file if it exists
|
||||
try {
|
||||
plugins.fs.unlinkSync(socketPath);
|
||||
} catch (error) {
|
||||
// File doesn't exist, that's fine
|
||||
// Clean up stale socket file if autoCleanupSocketFile is enabled
|
||||
if (this.options.autoCleanupSocketFile) {
|
||||
try {
|
||||
plugins.fs.unlinkSync(socketPath);
|
||||
} catch (error) {
|
||||
// File doesn't exist, that's fine
|
||||
}
|
||||
}
|
||||
|
||||
this.server = plugins.net.createServer((socket) => {
|
||||
@@ -247,6 +253,15 @@ export class UnixSocketTransport extends IpcTransport {
|
||||
this.server.on('error', reject);
|
||||
|
||||
this.server.listen(socketPath, () => {
|
||||
// Set socket permissions if specified
|
||||
if (this.options.socketMode !== undefined && process.platform !== 'win32') {
|
||||
try {
|
||||
plugins.fs.chmodSync(socketPath, this.options.socketMode);
|
||||
} catch (error) {
|
||||
// Ignore permission errors, not critical
|
||||
}
|
||||
}
|
||||
|
||||
this.connected = true;
|
||||
this.emit('connect');
|
||||
resolve();
|
||||
|
Reference in New Issue
Block a user