def handle_request(self, func): while not self._stop_event or not self._stop_event.is_set(): if not self.listen_sock: self.listen_sock = self._get_listen_socket(listen_num=50) if not self.listen_sock: self.logger.error("failed to listen {}:{}".format( self.ip, self.port)) return conn, client_address = self.listen_sock.accept() self.logger.info(" # Connected with {}".format(client_address)) try: connected_socket = self._create_socket_instance(conn) data = connected_socket.recv() ret_check_recv = self.bypass_check_data(data) if ret_check_recv: connected_socket.send(ret_check_recv) else: response = func(data) if response: connected_socket.send(response) except Exception as e: Logger.write_exception_log(self.logger, e, "# handle_request.exception") try: self.listen_sock.close() except Exception as c_e: self.logger.error(" # close.exception : {}".format(c_e)) self.listen_sock = None finally: conn.close()
def check_mod_server(ip, port, mod_name="NoName", show_send_recv_dat_=True, logger=Logger.get_stdout_logger()): if check_port(ip, port): check_rst = False try: recv = JsonSocket.json_send_and_recv( ip, port, {"cmd": "check"}, show_send_recv_dat_=show_send_recv_dat_) if recv: res = recv[0] if res is not None and "state" in res and res[ "state"] == "healthy": check_rst = True except Exception as e: Logger.write_exception_log( logger, e, "check_mod_server({}, {}, {})".format(ip, port, mod_name)) if check_rst: logger.info(" # {}://{}:{:d} is in healthy state.".format( mod_name, ip, port)) else: logger.info(" # {}://{}:{:d} is NOT in healthy state.".format( mod_name, ip, port)) return check_rst else: logger.info(" @ {}://{}:{:d} DOES NOT exist.".format( mod_name, ip, port)) return False
def _get_listen_socket(self, listen_num=5): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = (self.ip, self.port) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) try: sock.bind(server_address) except Exception as e: Logger.write_exception_log(self.logger, e) return None sock.listen(listen_num) self.logger.info("listen : {}, {}".format(self.ip, self.port)) return sock