summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/test_punt.py31
1 files changed, 23 insertions, 8 deletions
diff --git a/test/test_punt.py b/test/test_punt.py
index 4b9a05043f8..e9475296f69 100644
--- a/test/test_punt.py
+++ b/test/test_punt.py
@@ -6,6 +6,9 @@ import os
import threading
import struct
import copy
+import fcntl
+import time
+
from struct import unpack, unpack_from
try:
@@ -42,17 +45,26 @@ class serverSocketThread(threading.Thread):
self.sockName = sockName
self.sock = None
self.rx_pkts = []
+ self.keep_running = True
def rx_packets(self):
# Wait for some packets on socket
- while True:
- data = self.sock.recv(65536)
-
- # punt socket metadata
- # packet_desc = data[0:8]
-
- # Ethernet
- self.rx_pkts.append(Ether(data[8:]))
+ while self.keep_running:
+ try:
+ data = self.sock.recv(65536)
+
+ # punt socket metadata
+ # packet_desc = data[0:8]
+
+ # Ethernet
+ self.rx_pkts.append(Ether(data[8:]))
+ except IOError as e:
+ if e.errno == 11:
+ # nothing to receive, sleep a little
+ time.sleep(0.1)
+ pass
+ else:
+ raise
def run(self):
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
@@ -62,12 +74,14 @@ class serverSocketThread(threading.Thread):
pass
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 65536)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 65536)
+ fcntl.fcntl(self.sock, fcntl.F_SETFL, os.O_NONBLOCK)
self.sock.bind(self.sockName)
self.rx_packets()
def close(self):
self.sock.close()
+ self.keep_running = False
return self.rx_pkts
@@ -116,6 +130,7 @@ class TestPuntSocket(VppTestCase):
rx_pkts = []
for thread in self.sock_servers:
rx_pkts += thread.close()
+ thread.join()
return rx_pkts
def verify_port(self, pr, vpr):