Gateway-lås
Senast uppdaterad: 2025-12-11Varför
- Säkerställa att endast en gateway-instans körs per basport på samma värd; ytterligare gateways måste använda isolerade profiler och unika portar.
- Överleva krascher/SIGKILL utan att lämna kvar inaktuella låsfiler.
- Misslyckas snabbt med ett tydligt fel när kontrollporten redan är upptagen.
Mekanism
- Gateway (nätverksgateway) binder WebSocket-lyssnaren (standard
ws://127.0.0.1:18789) omedelbart vid uppstart med en exklusiv TCP-lyssnare. - Om bindningen misslyckas med
EADDRINUSEavbryts uppstarten medGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Operativsystemet frigör lyssnaren automatiskt vid alla processavslut, inklusive krascher och SIGKILL—ingen separat låsfil eller städsteg behövs.
- Vid nedstängning stänger gateway WebSocket-servern och den underliggande HTTP-servern för att snabbt frigöra porten.
Felyta
- Om en annan process håller porten avbryts uppstarten med
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Andra bindningsfel exponeras som
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").
Driftnoteringar
- Om porten är upptagen av en annan process är felet detsamma; frigör porten eller välj en annan med
openclaw gateway --port <port>. - macOS-appen upprätthåller fortfarande sitt eget lättviktiga PID-skydd innan den startar gateway; körningslåset upprätthålls av WebSocket-bindningen.