Example #1
0
    def run(self):
        with self.server.counter:
            try:
                fileobj = self.channel.makefile('rw')
                try:
                    value = self.delegate(Script(self.delegate, fileobj, self.client.transport, encoding=self.server.encoding))

                    if isinstance(value, threading.Thread):
                        value.join()

                except:
                    exc_info = sys.exc_info()
                    exception_string = traceback.format_exc()
                    try:
                        fileobj.write(
                            (u'\r\n' + u(exception_string).replace(u'\n', u'\r\n')).encode(self.server.encoding)
                        )
                    except:
                        pass
                    reraise(exc_info)
            except:
                self.server.exceptions.put_nowait(sys.exc_info())
            finally:
                try:
                    self.channel.close()
                except EOFError:
                    logger.debug('Channel already closed')
Example #2
0
 def stop(self):
     """
         Stop the server, waiting for the runloop to exit.
     """
     logging.info('stopping')
     self.socket.close()
     if self.is_alive():
         self.join()
     if not self.exceptions.empty():
         reraise(self.exceptions.get())