File size: 956 Bytes
cd8bd0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * Shared socket idle-timeout helper for the MITM proxy + HTTP-proxy listeners.
 *
 * Mirrors ProxyBridge's 60s relay idle timeout (ProxyBridge.c uses
 * poll(..., 60000) on every relay connection) so hung / half-open tunnels —
 * dropped Wi-Fi, dead upstreams that never send FIN/RST — cannot accumulate and
 * exhaust file descriptors, wedging the proxy under real agent traffic. (Gap 10.)
 */
import type { Socket } from "node:net";

function parseEnvNumber(value: string | undefined, fallback: number): number {
  if (!value) return fallback;
  const n = Number(value);
  return Number.isFinite(n) && n > 0 ? n : fallback;
}

export const MITM_IDLE_TIMEOUT_MS = parseEnvNumber(process.env.MITM_IDLE_TIMEOUT_MS, 60000);

/** Destroy `socket` if it is idle (no I/O) for `ms` milliseconds. */
export function applyIdleTimeout(socket: Socket, ms: number = MITM_IDLE_TIMEOUT_MS): void {
  socket.setTimeout(ms, () => {
    socket.destroy();
  });
}