if not self.socket:
logging.warning("Got events for closed stream %d", fd)
return
- if events & self.io_loop.READ:
- self._handle_read()
- if not self.socket:
- return
- if events & self.io_loop.WRITE:
- if self._connecting:
- self._handle_connect()
- self._handle_write()
- if not self.socket:
- return
- if events & self.io_loop.ERROR:
+ try:
+ if events & self.io_loop.READ:
+ self._handle_read()
+ if not self.socket:
+ return
+ if events & self.io_loop.WRITE:
+ if self._connecting:
+ self._handle_connect()
+ self._handle_write()
+ if not self.socket:
+ return
+ if events & self.io_loop.ERROR:
+ self.close()
+ return
+ state = self.io_loop.ERROR
+ if self._read_delimiter or self._read_bytes:
+ state |= self.io_loop.READ
+ if self._write_buffer:
+ state |= self.io_loop.WRITE
+ if state != self._state:
+ self._state = state
+ self.io_loop.update_handler(self.socket.fileno(), self._state)
+ except:
+ logging.error("Uncaught exception, closing connection.",
+ exc_info=True)
self.close()
- return
- state = self.io_loop.ERROR
- if self._read_delimiter or self._read_bytes:
- state |= self.io_loop.READ
- if self._write_buffer:
- state |= self.io_loop.WRITE
- if state != self._state:
- self._state = state
- self.io_loop.update_handler(self.socket.fileno(), self._state)
+ raise
def _run_callback(self, callback, *args, **kwargs):
try: