void handle_error(ranger::event::tcp_connection& conn)
	{
		auto ep = conn.remote_endpoint();
		std::cerr << "connection[" << ep << "] " << "error[" << conn.error_code() << "]: " << conn.error_description() << std::endl;

		m_conn_set.erase(conn);
	}
	void handle_eof(ranger::event::tcp_connection& conn)
	{
		auto ep = conn.remote_endpoint();
		std::cerr << "connection[" << ep << "] " << "eof." << std::endl;

		m_conn_set.erase(conn);
	}
	void handle_read(ranger::event::tcp_connection& conn, ranger::event::buffer&& buf)
	{
		std::vector<char> v(buf.size());
		buf.remove(&v.front(), v.size());
		for (auto ch: v) std::cout << ch << std::flush;
		conn.write_buffer().append(&v.front(), v.size());
	}
	void handle_timeout(ranger::event::tcp_connection& conn)
	{
		auto ep = conn.remote_endpoint();
		std::cerr << "thread[" << std::this_thread::get_id() << "] " << "connection[" << ep << "] " << "timeout." << std::endl;

		m_conn_set.erase(conn);
	}
	void handle_read(ranger::event::tcp_connection& conn, ranger::event::buffer&& buf)
	{
		std::cout << "thread[" << std::this_thread::get_id() << "] " << __FUNCTION__ << std::endl;
		conn.write_buffer().append(buf);
	}
	void handle_read(ranger::event::tcp_connection& conn, ranger::event::buffer&& buf) {
		conn.write_buffer().append(buf);
	}