diff options
author | Vincent Sanders <vince@kyllikki.org> | 2019-07-06 10:08:10 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2019-07-06 10:08:10 +0100 |
commit | f46b77160a0244b83ccd486df82ce14f7a4df59e (patch) | |
tree | 0d5bbc34b9ac2eca4f952270e3216a48f89dc411 /test | |
parent | ccf336bb4a46c5d66eb1b50a532db059b9c4fc8e (diff) | |
download | netsurf-f46b77160a0244b83ccd486df82ce14f7a4df59e.tar.gz netsurf-f46b77160a0244b83ccd486df82ce14f7a4df59e.tar.bz2 |
ensure monkey farmer copes with recv returnint EAGAIN
Diffstat (limited to 'test')
-rw-r--r-- | test/monkeyfarmer.py | 29 |
1 files changed, 18 insertions, 11 deletions
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") |