bridge (pb): Remove existing socket if any:

If the backend was not closed properly, the former socket may still be present. This was
preventing the backend to start again, while now the old socket is removed in this case.
This commit is contained in:
Goffi 2026-03-19 12:01:21 +01:00
commit 243aab9cec
2 changed files with 34 additions and 6 deletions

View file

@ -19,10 +19,12 @@
import dataclasses
from functools import partial
from pathlib import Path
from twisted.spread import jelly, pb
from twisted.internet import reactor
from twisted.spread import jelly, pb
from libervia.backend.core import exceptions
from libervia.backend.core.log import getLogger
from libervia.backend.tools import config
@ -103,7 +105,7 @@ class PBRoot(pb.Root):
##METHODS_PART##
class bridge(object):
class bridge:
def __init__(self):
log.info("Init Perspective Broker...")
self.root = PBRoot()
@ -113,6 +115,18 @@ class bridge(object):
if conn_type == "unix_socket":
socket_path = bridge_conf.socket_dir / "bridge_pb"
log.info(f"using UNIX Socket at {socket_path}")
if socket_path.exists():
if socket_path.is_socket():
log.warning(
"There is already a socket at this path, probably due to a bad "
"closing of the backend; we remove it."
)
socket_path.unlink()
else:
raise exceptions.BridgeInitError(
f"Unexpected file at socket path: {socket_path}"
)
reactor.listenUNIX(
str(socket_path), pb.PBServerFactory(self.root), mode=0o600
)

View file

@ -19,10 +19,12 @@
import dataclasses
from functools import partial
from pathlib import Path
from twisted.spread import jelly, pb
from twisted.internet import reactor
from twisted.spread import jelly, pb
from libervia.backend.core import exceptions
from libervia.backend.core.log import getLogger
from libervia.backend.tools import config
@ -103,7 +105,7 @@ class PBRoot(pb.Root):
##METHODS_PART##
class bridge(object):
class bridge:
def __init__(self):
log.info("Init Perspective Broker...")
self.root = PBRoot()
@ -113,6 +115,18 @@ class bridge(object):
if conn_type == "unix_socket":
socket_path = bridge_conf.socket_dir / "bridge_pb"
log.info(f"using UNIX Socket at {socket_path}")
if socket_path.exists():
if socket_path.is_socket():
log.warning(
"There is already a socket at this path, probably due to a bad "
"closing of the backend; we remove it."
)
socket_path.unlink()
else:
raise exceptions.BridgeInitError(
f"Unexpected file at socket path: {socket_path}"
)
reactor.listenUNIX(
str(socket_path), pb.PBServerFactory(self.root), mode=0o600
)