Index: Lib/asyncore.py =================================================================== --- Lib/asyncore.py (revision 67476) +++ Lib/asyncore.py (working copy) @@ -95,14 +95,15 @@ def readwrite(obj, flags): try: - if flags & (select.POLLIN | select.POLLPRI): - obj.handle_read_event() - if flags & select.POLLOUT: - obj.handle_write_event() - if flags & (select.POLLERR | select.POLLNVAL): - obj.handle_expt_event() - if flags & select.POLLHUP: + if flags & (select.POLLHUP | select.POLLERR | select.POLLNVAL): obj.handle_close() + else: + if flags & select.POLLIN: + obj.handle_read_event() + if flags & select.POLLOUT: + obj.handle_write_event() + if flags & select.POLLPRI: + obj.handle_expt_event() except (ExitNow, KeyboardInterrupt, SystemExit): raise except: Index: Lib/test/test_asyncore.py =================================================================== --- Lib/test/test_asyncore.py (revision 67476) +++ Lib/test/test_asyncore.py (working copy) @@ -137,7 +137,7 @@ def handle_error(self): self.error_handled = True - for flag in (select.POLLIN, select.POLLPRI): + for flag in [select.POLLIN]: tobj = testobj() self.assertEqual(tobj.read, False) asyncore.readwrite(tobj, flag) @@ -173,9 +173,9 @@ for flag in (select.POLLERR, select.POLLHUP, select.POLLNVAL): tobj = testobj() - self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], False) + self.assertEqual(tobj.closed, False) asyncore.readwrite(tobj, flag) - self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], True) + self.assertEqual(tobj.closed, True) # check that ExitNow exceptions in the object handler method # bubbles all the way up through asyncore readwrite calls