fail2ban.server.asyncserver module
**********************************

class fail2ban.server.asyncserver.AsyncServer(transmitter)

   Bases: "dispatcher"

   Attributes:
      **addr**
   -[ Methods ]-

   +------------+--------------------------------------------------------------------------------------------+
   | "isActive  |                                                                                            |
   | "(self)    |                                                                                            |
   +------------+--------------------------------------------------------------------------------------------+

   +--------------------------+------------+
   | **accept**               |            |
   +--------------------------+------------+
   | **add_channel**          |            |
   +--------------------------+------------+
   | **bind**                 |            |
   +--------------------------+------------+
   | **close**                |            |
   +--------------------------+------------+
   | **connect**              |            |
   +--------------------------+------------+
   | **create_socket**        |            |
   +--------------------------+------------+
   | **del_channel**          |            |
   +--------------------------+------------+
   | **handle_accept**        |            |
   +--------------------------+------------+
   | **handle_accepted**      |            |
   +--------------------------+------------+
   | **handle_close**         |            |
   +--------------------------+------------+
   | **handle_connect**       |            |
   +--------------------------+------------+
   | **handle_connect_event** |            |
   +--------------------------+------------+
   | **handle_error**         |            |
   +--------------------------+------------+
   | **handle_expt**          |            |
   +--------------------------+------------+
   | **handle_expt_event**    |            |
   +--------------------------+------------+
   | **handle_read**          |            |
   +--------------------------+------------+
   | **handle_read_event**    |            |
   +--------------------------+------------+
   | **handle_write**         |            |
   +--------------------------+------------+
   | **handle_write_event**   |            |
   +--------------------------+------------+
   | **listen**               |            |
   +--------------------------+------------+
   | **log**                  |            |
   +--------------------------+------------+
   | **log_info**             |            |
   +--------------------------+------------+
   | **readable**             |            |
   +--------------------------+------------+
   | **recv**                 |            |
   +--------------------------+------------+
   | **send**                 |            |
   +--------------------------+------------+
   | **set_reuse_addr**       |            |
   +--------------------------+------------+
   | **set_socket**           |            |
   +--------------------------+------------+
   | **start**                |            |
   +--------------------------+------------+
   | **stop**                 |            |
   +--------------------------+------------+
   | **stop_communication**   |            |
   +--------------------------+------------+
   | **writable**             |            |
   +--------------------------+------------+

   close(self)

   handle_accept(self)

   isActive(self)

   start(self, sock, force, timeout=None, use_poll=False)

   stop(self)

   stop_communication(self)

   writable(self)

exception fail2ban.server.asyncserver.AsyncServerException

   Bases: "Exception"

class fail2ban.server.asyncserver.RequestHandler(conn, transmitter)

   Bases: "async_chat"

   Attributes:
      **addr**
   -[ Methods ]-

   +------------+--------------------------------------------------------------------------------------------+
   | "LoadErro  |                                                                                            |
   | r"         |                                                                                            |
   +------------+--------------------------------------------------------------------------------------------+
   | "close_wh  | automatically close this channel once the outgoing queue is empty                          |
   | en_done"(  |                                                                                            |
   | self)      |                                                                                            |
   +------------+--------------------------------------------------------------------------------------------+
   | "handle_e  |                                                                                            |
   | rror"(sel  |                                                                                            |
   | f)         |                                                                                            |
   +------------+--------------------------------------------------------------------------------------------+
   | "readable  | predicate for inclusion in the readable for select()                                       |
   | "(self)    |                                                                                            |
   +------------+--------------------------------------------------------------------------------------------+
   | "set_term  | Set the input delimiter.                                                                   |
   | inator"(s  |                                                                                            |
   | elf, term) |                                                                                            |
   +------------+--------------------------------------------------------------------------------------------+
   | "writable  | predicate for inclusion in the writable for select()                                       |
   | "(self)    |                                                                                            |
   +------------+--------------------------------------------------------------------------------------------+

   +---------------------------+------------+
   | **accept**                |            |
   +---------------------------+------------+
   | **add_channel**           |            |
   +---------------------------+------------+
   | **bind**                  |            |
   +---------------------------+------------+
   | **close**                 |            |
   +---------------------------+------------+
   | **collect_incoming_data** |            |
   +---------------------------+------------+
   | **connect**               |            |
   +---------------------------+------------+
   | **create_socket**         |            |
   +---------------------------+------------+
   | **del_channel**           |            |
   +---------------------------+------------+
   | **discard_buffers**       |            |
   +---------------------------+------------+
   | **found_terminator**      |            |
   +---------------------------+------------+
   | **get_terminator**        |            |
   +---------------------------+------------+
   | **handle_accept**         |            |
   +---------------------------+------------+
   | **handle_accepted**       |            |
   +---------------------------+------------+
   | **handle_close**          |            |
   +---------------------------+------------+
   | **handle_connect**        |            |
   +---------------------------+------------+
   | **handle_connect_event**  |            |
   +---------------------------+------------+
   | **handle_expt**           |            |
   +---------------------------+------------+
   | **handle_expt_event**     |            |
   +---------------------------+------------+
   | **handle_read**           |            |
   +---------------------------+------------+
   | **handle_read_event**     |            |
   +---------------------------+------------+
   | **handle_write**          |            |
   +---------------------------+------------+
   | **handle_write_event**    |            |
   +---------------------------+------------+
   | **initiate_send**         |            |
   +---------------------------+------------+
   | **listen**                |            |
   +---------------------------+------------+
   | **log**                   |            |
   +---------------------------+------------+
   | **log_info**              |            |
   +---------------------------+------------+
   | **push**                  |            |
   +---------------------------+------------+
   | **push_with_producer**    |            |
   +---------------------------+------------+
   | **recv**                  |            |
   +---------------------------+------------+
   | **send**                  |            |
   +---------------------------+------------+
   | **set_reuse_addr**        |            |
   +---------------------------+------------+
   | **set_socket**            |            |
   +---------------------------+------------+

   exception LoadError

      Bases: "Exception"

   collect_incoming_data(self, data)

   found_terminator(self)

   handle_close(self)

   handle_error(self)

fail2ban.server.asyncserver.loop(active, timeout=None, use_poll=False, err_count=None)

   Custom event loop implementation

   Uses poll instead of loop to respect *active* flag, to avoid loop
   timeout mistake: different in poll and poll2 (sec vs ms), and to
   prevent sporadic errors like EBADF 'Bad file descriptor' etc. (see
   gh-161)
