diff --git a/simtrace2_pysniff/gsmtap.py b/simtrace2_pysniff/gsmtap.py index 75e5abd..6f9e7a8 100644 --- a/simtrace2_pysniff/gsmtap.py +++ b/simtrace2_pysniff/gsmtap.py @@ -79,6 +79,7 @@ class GsmtapReceiver: self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self._sock.bind((bind_ip, bind_port)) self._sock.settimeout(1.0) + self._closed = False def read_packet(self): """Block until a GSMTAP-SIM packet arrives. @@ -109,3 +110,4 @@ class GsmtapReceiver: def close(self): self._sock.close() + self._closed = True diff --git a/simtrace2_pysniff/server/capture.py b/simtrace2_pysniff/server/capture.py index 0369904..6d0b5ae 100644 --- a/simtrace2_pysniff/server/capture.py +++ b/simtrace2_pysniff/server/capture.py @@ -34,11 +34,14 @@ def gsmtap_msg_type(sub_type): class GsmtapListener: def __init__(self, bind_port=4729): + self._bind_port = bind_port self._receiver = GsmtapReceiver(bind_port=bind_port) self._running = False self._dropped = 0 def start(self): + if getattr(self._receiver, '_closed', False): + self._receiver = GsmtapReceiver(bind_port=self._bind_port) self._running = True self._dropped = 0