doc/html/boost_asio/example/http/server2/server.cpp

//
// server.cpp
// ~~~~~~~~~~
//
// Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//

#include "server.hpp"
#include <boost/bind.hpp>

namespace http {
	namespace server2 {

		server::server(const std::string& address, const std::string& port,
			const std::string& doc_root, std::size_t io_service_pool_size)
			: io_service_pool_(io_service_pool_size),
			acceptor_(io_service_pool_.get_io_service()),
			new_connection_(new connection(
				io_service_pool_.get_io_service(), request_handler_)),
			request_handler_(doc_root)
		{
			// Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
			boost::asio::ip::tcp::resolver resolver(acceptor_.io_service());
			boost::asio::ip::tcp::resolver::query query(address, port);
			boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);
			acceptor_.open(endpoint.protocol());
			acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
			acceptor_.bind(endpoint);
			acceptor_.listen();
			acceptor_.async_accept(new_connection_->socket(),
				boost::bind(&server::handle_accept, this,
					boost::asio::placeholders::error));
		}

		void server::run()
		{
			io_service_pool_.run();
		}

		void server::stop()
		{
			io_service_pool_.stop();
		}

		void server::handle_accept(const boost::system::error_code& e)
		{
			if (!e)
			{
				new_connection_->start();
				new_connection_.reset(new connection(
					io_service_pool_.get_io_service(), request_handler_));
				acceptor_.async_accept(new_connection_->socket(),
					boost::bind(&server::handle_accept, this,
						boost::asio::placeholders::error));
			}
		}

	} // namespace server2
} // namespace http
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值