From f46b77160a0244b83ccd486df82ce14f7a4df59e Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sat, 6 Jul 2019 10:08:10 +0100 Subject: ensure monkey farmer copes with recv returnint EAGAIN --- test/monkeyfarmer.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'test') diff --git a/test/monkeyfarmer.py b/test/monkeyfarmer.py index c5ede027d..e4c654364 100644 --- a/test/monkeyfarmer.py +++ b/test/monkeyfarmer.py @@ -31,7 +31,7 @@ import os import socket import subprocess import time - +import errno class MonkeyFarmer(asyncore.dispatcher): @@ -73,16 +73,23 @@ class MonkeyFarmer(asyncore.dispatcher): self.close() def handle_read(self): - got = self.recv(8192) - if not got: - self.deadmonkey = True - # ensure the child process is finished and report the exit - if self.monkey.poll() is None: - self.monkey.terminate() - self.monkey.wait() - self.lines.insert(0, "GENERIC EXIT {}".format( - self.monkey.returncode).encode('utf-8')) - return + try: + got = self.recv(8192) + if not got: + self.deadmonkey = True + # ensure the child process is finished and report the exit + if self.monkey.poll() is None: + self.monkey.terminate() + self.monkey.wait() + self.lines.insert(0, "GENERIC EXIT {}".format( + self.monkey.returncode).encode('utf-8')) + return + except socket.error as error: + if error.errno == errno.EAGAIN or error.errno == errno.EWOULDBLOCK: + return + else: + raise + self.incoming += got if b"\n" in self.incoming: lines = self.incoming.split(b"\n") -- cgit v1.2.3