diff --git a/Lib/asyncore.py b/Lib/asyncore.py --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -104,7 +104,7 @@ def readwrite(obj, flags): try: - if flags & select.POLLIN: + if flags & (select.POLLIN | select.POLLPRI) == select.POLLIN: obj.handle_read_event() if flags & select.POLLOUT: obj.handle_write_event() @@ -146,7 +146,7 @@ except InterruptedError: return - for fd in r: + for fd in set(r).difference(e): obj = map.get(fd) if obj is None: continue diff --git a/Lib/test/test_asyncore.py b/Lib/test/test_asyncore.py --- a/Lib/test/test_asyncore.py +++ b/Lib/test/test_asyncore.py @@ -676,6 +676,10 @@ class TestClient(BaseClient): def handle_expt(self): self.flag = True + self.socket.recv(4096, socket.MSG_OOB) + + def handle_read(self): + self.recv(1) class TestHandler(BaseTestHandler): def __init__(self, conn):