papi: add a per-call _timeout option
[vpp.git] / src / vpp-api / python / vpp_papi / vpp_transport_socket.py
index 3c1ea32..d6431ca 100644 (file)
@@ -188,10 +188,12 @@ class VppTransport(object):
 
         # Send header
         header = self.header.pack(0, len(buf), 0)
-        if self.socket.sendall(header) is None:
-            raise VppTransportSocketIOError(1, 'Failed to send')
-        if self.socket.sendall(buf) is None:
-            raise VppTransportSocketIOError(1, 'Failed to send')
+        try:
+            self.socket.sendall(header)
+            self.socket.sendall(buf)
+        except socket.error as err:
+            raise VppTransportSocketIOError(1, 'Sendall error: {err!r}'.format(
+                err=err))
 
     def _read_fixed(self, size):
         """Repeat receive until fixed size is read. Return empty on error."""
@@ -223,10 +225,12 @@ class VppTransport(object):
             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