[Python-checkins] r70873 - python/trunk/Lib/asyncore.py

josiah.carlson python-checkins at python.org
Tue Mar 31 21:32:35 CEST 2009


Author: josiah.carlson
Date: Tue Mar 31 21:32:34 2009
New Revision: 70873
Log:
This resolves issue 1161031. Tests pass.
Modified:
 python/trunk/Lib/asyncore.py
Modified: python/trunk/Lib/asyncore.py
==============================================================================
--- python/trunk/Lib/asyncore.py	(original)
+++ python/trunk/Lib/asyncore.py	Tue Mar 31 21:32:34 2009
@@ -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,7 +82,7 @@
 def write(obj):
 try:
 obj.handle_write_event()
- except (ExitNow, KeyboardInterrupt, SystemExit):
+ except _reraised_exceptions:
 raise
 except:
 obj.handle_error()
@@ -88,22 +90,22 @@
 def _exception(obj):
 try:
 obj.handle_expt_event()
- except (ExitNow, KeyboardInterrupt, SystemExit):
+ 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()
@@ -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):
@@ -432,22 +435,17 @@
 self.handle_write()
 
 def handle_expt_event(self):
- # if the handle_expt is the same default worthless method,
- # we'll not even bother calling it, we'll instead generate
- # a useful error
- x = True
- try:
- y1 = self.__class__.handle_expt.im_func
- y2 = dispatcher.handle_expt.im_func
- x = y1 is y2
- except AttributeError:
- pass
-
- if x:
- err = self.socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
- msg = _strerror(err)
-
- raise socket.error(err, msg)
+ # handle_expt_event() is called if there might be an error on the
+ # socket, or if there is OOB data
+ # check for the error condition first
+ err = self.socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
+ if err != 0:
+ # we can get here when select.select() says that there is an
+ # exceptional condition on the socket
+ # since there is an error, we'll go ahead and close the socket
+ # like we would in a subclassed handle_read() that received no
+ # data
+ self.handle_close()
 else:
 self.handle_expt()
 
@@ -472,7 +470,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 +551,7 @@
 pass
 elif not ignore_all:
 raise
- except (ExitNow, KeyboardInterrupt, SystemExit):
+ except _reraised_exceptions:
 raise
 except:
 if not ignore_all:


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /