import threading
import select
import multiprocessing
-try:
- import queue as queue
-except ImportError:
- import Queue as queue
+import queue
import logging
-from . import vpp_papi
+
+logger = logging.getLogger('vpp_papi.transport')
+logger.addHandler(logging.NullHandler())
class VppTransportSocketIOError(IOError):
pass
-class VppTransport(object):
+class VppTransport:
VppTransportSocketIOError = VppTransportSocketIOError
def __init__(self, parent, read_timeout, server_address):
try:
self.socket.connect(self.server_address)
except socket.error as msg:
- logging.error("{} on socket {}".format(msg, self.server_address))
- raise
+ # logging.error("{} on socket {}".format(msg, self.server_address))
+ raise msg
self.connected = True
try:
# Might fail, if VPP closes socket before packet makes it out,
# or if there was a failure during connect().
+ # TODO: manually build message so that .disconnect releases server-side resources
rv = self.parent.api.sockclnt_delete(index=self.socket_index)
- except (IOError, vpp_papi.VPPApiError):
+ except (IOError, self.parent.VPPApiError):
pass
self.connected = False
if self.socket is not None:
return msg
raise VppTransportSocketIOError(1, 'Unknown socket read error')
- def read(self):
+ def read(self, timeout=None):
if not self.connected:
raise VppTransportSocketIOError(1, 'Not connected')
+ if timeout is None:
+ timeout = self.read_timeout
try:
- return self.q.get(True, self.read_timeout)
+ return self.q.get(True, timeout)
except queue.Empty:
return None