Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #define BOOST_ASIO_ENABLE_HANDLER_TRACKING
- #include <iostream>
- #include <thread>
- #include <memory>
- #include <vector>
- #include <string>
- #include <boost/asio.hpp>
- class Connection
- {
- public:
- Connection(boost::asio::io_service & io_service) : socket_(io_service)
- {}
- boost::asio::ip::tcp::socket & socket() { return socket_; }
- private:
- boost::asio::ip::tcp::socket socket_;
- };
- class Server
- {
- public:
- Server(
- boost::asio::io_service & io_service,
- const std::string & adderss,
- const std::string port
- ) : io_service_(io_service),
- acceptor_(io_service_),
- resolver_(io_service_)
- {
- boost::asio::ip::tcp::resolver::query query(adderss, 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();
- start_accept();
- }
- void start_accept()
- {
- connection_.push_back(std::make_shared<Connection>(io_service_));
- acceptor_.async_accept(connection_.back()->socket(), std::bind(&Server::accept_handler, this, std::placeholders::_1));
- }
- void accept_handler(const boost::system::error_code& ec)
- {
- std::cout << "accept connection" << std::endl;
- start_accept();
- }
- private:
- boost::asio::io_service & io_service_;
- boost::asio::ip::tcp::acceptor acceptor_;
- boost::asio::ip::tcp::resolver resolver_;
- std::vector<std::shared_ptr<Connection>> connection_;
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- std::vector<std::shared_ptr<std::thread>> pool;
- boost::asio::io_service io_service_;
- boost::asio::io_service::work work_(io_service_);
- const size_t kThreads = 2;
- for (size_t i = 0; i < kThreads; ++i)
- {
- pool.push_back( std::make_shared<std::thread>( [&](){io_service_.run();} ) );
- }
- Server s(io_service_, "127.0.0.1", "8089");
- char ch;
- std::cin >> ch;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement