Advertisement
Guest User

Untitled

a guest
Oct 19th, 2012
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #define BOOST_ASIO_ENABLE_HANDLER_TRACKING
  4.  
  5. #include <iostream>
  6. #include <thread>
  7. #include <memory>
  8. #include <vector>
  9. #include <string>
  10. #include <boost/asio.hpp>
  11.  
  12. class Connection
  13. {
  14. public:
  15.     Connection(boost::asio::io_service & io_service) : socket_(io_service)
  16.     {}
  17.  
  18.     boost::asio::ip::tcp::socket & socket() { return socket_; }
  19.  
  20. private:
  21.     boost::asio::ip::tcp::socket socket_;
  22. };
  23.  
  24. class Server
  25. {
  26. public:
  27.     Server(
  28.         boost::asio::io_service & io_service,
  29.         const std::string & adderss,
  30.         const std::string port
  31.         ) : io_service_(io_service),
  32.             acceptor_(io_service_),
  33.             resolver_(io_service_)
  34.     {
  35.         boost::asio::ip::tcp::resolver::query query(adderss, port);
  36.         boost::asio::ip::tcp::endpoint endpoint = *resolver_.resolve(query);
  37.         acceptor_.open(endpoint.protocol());
  38.         acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
  39.         acceptor_.bind(endpoint);
  40.         acceptor_.listen();
  41.         start_accept();        
  42.     }
  43.  
  44.     void start_accept()
  45.     {
  46.         connection_.push_back(std::make_shared<Connection>(io_service_));
  47.         acceptor_.async_accept(connection_.back()->socket(), std::bind(&Server::accept_handler, this, std::placeholders::_1));
  48.     }
  49.  
  50.     void accept_handler(const boost::system::error_code& ec)
  51.     {
  52.         std::cout << "accept connection" << std::endl;
  53.         start_accept();
  54.     }
  55.  
  56. private:
  57.     boost::asio::io_service & io_service_;
  58.     boost::asio::ip::tcp::acceptor acceptor_;
  59.     boost::asio::ip::tcp::resolver resolver_;
  60.     std::vector<std::shared_ptr<Connection>> connection_;
  61. };
  62.  
  63. int _tmain(int argc, _TCHAR* argv[])
  64. {
  65.     std::vector<std::shared_ptr<std::thread>> pool;
  66.     boost::asio::io_service io_service_;
  67.     boost::asio::io_service::work work_(io_service_);
  68.  
  69.     const size_t kThreads = 2;
  70.  
  71.     for (size_t i = 0; i < kThreads; ++i)
  72.     {
  73.         pool.push_back( std::make_shared<std::thread>( [&](){io_service_.run();} ) );
  74.     }
  75.  
  76.     Server s(io_service_, "127.0.0.1", "8089");
  77.  
  78.     char ch;
  79.     std::cin >> ch;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement