#include #include #include #include #include using boost::asio::ip::tcp; class tcp_connection : public boost::enable_shared_from_this { public: typedef boost::shared_ptr pointer; static pointer create(boost::asio::io_service& io_service) { return pointer(new tcp_connection(io_service)); } tcp::socket& socket() { return socket_; } void start() { boost::asio::async_write(socket_, boost::asio::buffer("Hei!\n"), boost::bind(&tcp_connection::handle_write, shared_from_this())); } private: tcp::socket socket_; tcp_connection(boost::asio::io_service& io_service) : socket_(io_service) { } void handle_write() { } }; class tcp_server { public: tcp_server(boost::asio::io_service& io_service) : acceptor_(io_service, tcp::endpoint(tcp::v4(), 12345)) { start_accept(); } private: tcp::acceptor acceptor_; void start_accept() { tcp_connection::pointer new_connection = tcp_connection::create(acceptor_.io_service()); acceptor_.async_accept(new_connection->socket(), boost::bind(&tcp_server::handle_accept, this, new_connection, boost::asio::placeholders::error)); } void handle_accept(tcp_connection::pointer new_connection, const boost::system::error_code& error) { if(!error) { new_connection->start(); start_accept(); } } }; int main() { try { boost::asio::io_service io_service; tcp_server server(io_service); std::cout << "Listening to port 12345" << std::endl; io_service.run(); } catch(std::exception& e) { std::cerr << "Exception caught: " << e.what() << std::endl; } }