示例#1
0
http_server::http_server(io_service_pool& ios, unsigned short port, std::string address /*= "0.0.0.0"*/)
    : m_io_service_pool(ios)
    , m_io_service(ios.get_io_service())
    , m_ssl_context(ios.get_io_service(), boost::asio::ssl::context::sslv23)
    , m_acceptor(m_io_service)
    , m_listening(false)
    , m_timer(m_io_service)
{
    m_ssl_context.set_options(boost::asio::ssl::context::default_workarounds| boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::single_dh_use);
    //m_ssl_context.set_password_callback(boost::bind(&server::get_password, this));
    //m_ssl_context.use_certificate_chain_file("server.pem");
    //m_ssl_context.use_private_key_file("server.pem", boost::asio::ssl::context::pem);
    //m_ssl_context.use_tmp_dh_file("dh512.pem");


    boost::asio::ip::tcp::resolver resolver(m_io_service);
    std::ostringstream port_string;
    port_string.imbue(std::locale("C"));
    port_string << port;
    boost::system::error_code ignore_ec;
    boost::asio::ip::tcp::resolver::query query(address, port_string.str());
    boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query, ignore_ec);
    if (ignore_ec)
    {
        LOG_ERR << "HTTP Server bind address, DNS resolve failed: " << ignore_ec.message() << ", address: " << address;
        return;
    }
    boost::asio::ip::tcp::endpoint endpoint = *endpoint_iterator;
    m_acceptor.open(endpoint.protocol(), ignore_ec);
    if (ignore_ec)
    {
        LOG_ERR << "HTTP Server open protocol failed: " << ignore_ec.message();
        return;
    }
    m_acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true), ignore_ec);
    if (ignore_ec)
    {
        LOG_ERR << "HTTP Server set option failed: " << ignore_ec.message();
        return;
    }
    m_acceptor.bind(endpoint, ignore_ec);
    if (ignore_ec)
    {
        LOG_ERR << "HTTP Server bind failed: " << ignore_ec.message() << ", address: " << address;
        return;
    }
    m_acceptor.listen(boost::asio::socket_base::max_connections, ignore_ec);
    if (ignore_ec)
    {
        LOG_ERR << "HTTP Server listen failed: " << ignore_ec.message();
        return;
    }
    m_listening = true;
    m_timer.expires_from_now(seconds(1));
    m_timer.async_wait(boost::bind(&http_server::on_tick, this, boost::asio::placeholders::error));
}
示例#2
0
static void terminator(io_service_pool& ios, router_server& serv, login_moudle& login, http_server& http_serv)
{
	login.quit();
	serv.stop();
	http_serv.stop();
	ios.stop();
}
 async_asio_echo_serv_ex(short port, uint32_t buffer_size = 32768,
     uint32_t packet_size = 64,
     uint32_t pool_size = std::thread::hardware_concurrency())
     : io_service_pool_(pool_size),
       acceptor_(io_service_pool_.get_first_io_service(), ip::tcp::endpoint(ip::tcp::v4(), port)),
       buffer_size_(buffer_size), packet_size_(packet_size)
 {
     do_accept();
 }
 async_asio_echo_serv_ex(const std::string & ip_addr, const std::string & port,
     uint32_t buffer_size = 32768,
     uint32_t packet_size = 64,
     uint32_t pool_size = std::thread::hardware_concurrency())
     : io_service_pool_(pool_size), acceptor_(io_service_pool_.get_first_io_service()),
       buffer_size_(buffer_size), packet_size_(packet_size)
 {
     start(ip_addr, port);
 }
    void do_accept2()
    {
        session_.reset(new asio_session(io_service_pool_.get_io_service(), buffer_size_, packet_size_, g_test_mode));
        acceptor_.async_accept(session_->socket(),
            [this](const boost::system::error_code & ec)
            {
                if (!ec) {
                    session_->start();
                }
                else {
                    // Accept error
                    std::cout << "async_asio_echo_serv_ex::handle_accept2() - Error: (code = " << ec.value() << ") "
                              << ec.message().c_str() << std::endl;
                    session_->stop();
                    session_.reset();
                }

                do_accept2();
            });
    }
    void start(const std::string & ip_addr, const std::string & port)
    {
        ip::tcp::resolver resolver(io_service_pool_.get_now_io_service());
        ip::tcp::resolver::query query(ip_addr, port);
        ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);

        boost::system::error_code ec;
        acceptor_.open(endpoint.protocol(), ec);
        if (ec) {
            // Open endpoint error
            std::cout << "async_asio_echo_serv_ex::start() - Error: (code = " << ec.value() << ") "
                      << ec.message().c_str() << std::endl;
            return;
        }

        boost::asio::socket_base::reuse_address option(true);
        acceptor_.set_option(option);
        acceptor_.bind(endpoint);
        acceptor_.listen();

        do_accept();
    }
示例#7
0
GatewayServer::GatewayServer(io_service_pool& pool, const std::string& script_file)
	:sub_service(pool, GATEWAYSERVER, script_file),
	one_second_timer_(pool.get_logic_service())
{
}
 void run()
 {
     thread_ = std::make_shared<std::thread>([this] { io_service_pool_.run(); });
 }
 void do_accept()
 {
     asio_session * new_session = new asio_session(io_service_pool_.get_io_service(), buffer_size_, packet_size_, g_test_mode);
     acceptor_.async_accept(new_session->socket(), boost::bind(&async_asio_echo_serv_ex::handle_accept,
         this, boost::asio::placeholders::error, new_session));
 }