self.message_table = {}
self.sque = multiprocessing.Queue()
self.q = multiprocessing.Queue()
- self.message_thread = threading.Thread(target=self.msg_thread_func)
+ self.message_thread = None # Will be set on connect().
def msg_thread_func(self):
while True:
def connect(self, name, pfx, msg_handler, rx_qlen):
+ if self.message_thread.daemon is not None:
+ raise RuntimeError(
+ "PAPI socket transport connect: You need to disconnect first.")
+ self.message_thread.daemon = threading.Thread(
+ target=self.msg_thread_func)
+
# Create a UDS socket
self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
self.socket.settimeout(self.read_timeout)
return 0
def disconnect(self):
+ # TODO: Should we detect if user forgot to connect first?
rv = 0
try: # Might fail, if VPP closes socket before packet makes it out
rv = self.parent.api.sockclnt_delete(index=self.socket_index)
self.socket.close()
self.sque.put(True) # Terminate listening thread
self.message_thread.join()
+ # Allow additional connect() calls.
+ self.message_thread = None
return rv
def suspend(self):