/* IST DER PORT WIRKLICH MEINER? Gemeinsamer Baustein für alle Prüfungen, die einen eigenen Server starten. DER FEHLER, DEN DAS VERHINDERT — und der in diesem Haus schon zweimal zugeschlagen hat: Läuft auf dem gewünschten Port schon ein anderer Prozess, dann startet der eigene Server nicht. `app.listen()` meldet das an einen Fehlerbehandler, den niemand gesetzt hat -- die Prüfung läuft weiter und misst ab da gegen den FREMDEN Server. Sie bekommt Antworten, sie bekommt sogar plausible Antworten, und sie meldet Fehler, die es nicht gibt (oder schlimmer: sie meldet "in Ordnung" über einen Stand, den sie nie angesehen hat). Das erste Mal stand es schon in der Projektnotiz vom 27.08.2026: *"Ein alter Testserver hielt den Port besetzt (EADDRINUSE), der neue startete still nicht — ich habe zwischenzeitlich gegen den alten Stand gemessen."* Das zweite Mal am 05.09.2026: Ein Prüflauf lief von Hand, während die Gesamtprüfung denselben Lauf ebenfalls aufrief. Beide wollten Port 4289. Ergebnis war ein WebKit-Fehler, den es gar nicht gab -- die Anmeldung scheiterte, weil der Code aus der einen Datenbank gegen den Server der anderen geprüft wurde. Zwei Fehlersuchen an der falschen Stelle (HSTS, dann CSP) waren die Folge. DESHALB: Vor dem Start wird nachgesehen, ob der Port frei ist. Ist er belegt, bricht die Prüfung SOFORT ab und sagt, warum. Ein belegter Port ist kein Messergebnis -- er ist der dritte Ausgang: nicht in Ordnung ist etwas anderes als nicht nachgesehen. =================================================================== */ import { createServer } from "node:net"; /** Wirft, wenn der Port belegt ist. Sonst gibt er ihn frei zurück. */ export async function portMussFreiSein(port, wer = "diese Pruefung") { const belegt = await new Promise((fertig) => { const s = createServer(); s.once("error", (f) => fertig(f.code === "EADDRINUSE")); s.once("listening", () => s.close(() => fertig(false))); s.listen(port, "127.0.0.1"); }); if (belegt) { console.error(`\nABBRUCH: Port ${port} ist belegt.\n`); console.error(` ${wer} startet einen eigenen Server auf diesem Port. Laeuft dort`); console.error(` schon etwas, wuerde gegen einen FREMDEN Stand gemessen -- mit`); console.error(` Ergebnissen, die nichts ueber den eigenen Code aussagen.\n`); console.error(` Meist laeuft parallel noch ein zweiter Prueflauf (etwa`); console.error(` tools/alles-pruefen.mjs). Erst den beenden, dann hier neu starten.\n`); console.error(` Nachsehen, wer den Port haelt:`); console.error(` netstat -ano | findstr :${port}\n`); process.exit(3); } return port; }