Index: asyncore.py =================================================================== --- asyncore.py (revision 70829) +++ asyncore.py (working copy) @@ -69,10 +69,12 @@ class ExitNow(Exception): pass +_reraised_exceptions = (ExitNow, KeyboardInterrupt, SystemExit) + def read(obj): try: obj.handle_read_event() - except (ExitNow, KeyboardInterrupt, SystemExit): + except _reraised_exceptions: raise except: obj.handle_error() @@ -80,30 +82,30 @@ def write(obj): try: obj.handle_write_event() - except (ExitNow, KeyboardInterrupt, SystemExit): + except _reraised_exceptions: raise except: obj.handle_error() -def _exception(obj): +def close(obj): try: - obj.handle_expt_event() - except (ExitNow, KeyboardInterrupt, SystemExit): + obj.handle_close() + except _reraised_exceptions: raise except: obj.handle_error() def readwrite(obj, flags): try: - if flags & (select.POLLIN | select.POLLPRI): + if flags & select.POLLPRI: + obj.handle_expt_event() + if flags & select.POLLIN: 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() - except (ExitNow, KeyboardInterrupt, SystemExit): + except _reraised_exceptions: raise except: obj.handle_error() @@ -150,7 +152,7 @@ obj = map.get(fd) if obj is None: continue - _exception(obj) + close(obj) def poll2(timeout=0.0, map=None): # Use the poll() support added to the select module in Python 2.0 @@ -211,6 +213,7 @@ accepting = False closing = False addr = None + ignore_log_types = frozenset(['warning']) def __init__(self, sock=None, map=None): if map is None: @@ -398,7 +401,7 @@ sys.stderr.write('log: %s\n' % str(message)) def log_info(self, message, type='info'): - if __debug__ or type != 'info': + if __debug__ or type not in self.ignore_log_types: print '%s: %s' % (type, message) def handle_read_event(self): @@ -472,7 +475,7 @@ self.handle_close() def handle_expt(self): - self.log_info('unhandled exception', 'warning') + self.log_info('unhandled incoming priority event', 'warning') def handle_read(self): self.log_info('unhandled read event', 'warning') @@ -553,7 +556,7 @@ pass elif not ignore_all: raise - except (ExitNow, KeyboardInterrupt, SystemExit): + except _reraised_exceptions: raise except: if not ignore_all: