def main(): authorizer = DummyAuthorizer() authorizer.add_user('user', '12345', '.', perm='elradfmw') authorizer.add_anonymous('.') handler = AntiFloodHandler handler.authorizer = authorizer ftpd = FTPServer(('', 21), handler) ftpd.serve_forever(timeout=1)
def serve_forever(self, timeout=None, blocking=True): self._serving = True closed = False try: _FTPServer.serve_forever(self, timeout, blocking) except (KeyboardInterrupt, SystemExit): self.close_all() closed = True raise finally: if blocking and not closed: self.close_all()
def close_all(self): tasks = self._active_tasks[:] # this must be set after getting active tasks as it causes # thread objects to get out of the list too soon self._serving = False if tasks and hasattr(tasks[0], 'terminate'): for t in tasks: try: t.terminate() except OSError: err = sys.exc_info()[1] if err.errno != errno.ESRCH: raise for t in tasks: if t.is_alive(): t.join() del self._active_tasks[:] _FTPServer.close_all(self)
def handle_accepted(self, sock, addr): handler = _FTPServer.handle_accepted(self, sock, addr) if handler is not None: # unregister the handler from the main IOLoop used by the # main thread to accept connections self.ioloop.unregister(handler._fileno) t = self._start_task(target=self._loop, args=(handler,)) t.name = repr(addr) t.start() self._lock.acquire() self._active_tasks.append(t) self._lock.release()
def handle_accepted(self, sock, addr): handler = _FTPServer.handle_accepted(self, sock, addr) if handler is not None: # unregister the handler from the main IOLoop used by the # main thread to accept connections self.ioloop.unregister(handler._fileno) t = self._start_task(target=self._loop, args=(handler, )) t.name = repr(addr) t.start() self._lock.acquire() self._active_tasks.append(t) self._lock.release()
def __init__(self, address, handler, ioloop=None): _FTPServer.__init__(self, address, handler, ioloop) self._serving = False self._active_tasks = []