Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- + ls
- echo_server.cpp
- run.sh
- + rm -f echo_server
- + ./echo_server
- ./run.sh: строка 5: ./echo_server: Нет такого файла или каталога
- + cat ./run.sh
- #!/bin/bash -x
- ls
- rm -f echo_server
- ./echo_server
- cat $0
- cat echo_server.cpp
- uname -srm
- g++ --version
- dpkg -l *boost* | grep ^ii
- g++ \
- -std=c++11 \
- echo_server.cpp \
- -oecho_server \
- -lboost_coroutine \
- -lboost_context \
- -lboost_system \
- -pthread
- ./echo_server
- + cat echo_server.cpp
- //
- // echo_server.cpp
- // ~~~~~~~~~~~~~~~
- //
- // Copyright (c) 2003-2014 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 <boost/asio/io_service.hpp>
- #include <boost/asio/ip/tcp.hpp>
- #include <boost/asio/spawn.hpp>
- #include <boost/asio/steady_timer.hpp>
- #include <boost/asio/write.hpp>
- #include <iostream>
- #include <memory>
- using boost::asio::ip::tcp;
- class session : public std::enable_shared_from_this<session>
- {
- public:
- explicit session(tcp::socket socket)
- : socket_(std::move(socket)),
- timer_(socket_.get_io_service()),
- strand_(socket_.get_io_service())
- {
- }
- void go()
- {
- auto self(shared_from_this());
- boost::asio::spawn(strand_,
- [this, self](boost::asio::yield_context yield)
- {
- try
- {
- char data[128];
- for (;;)
- {
- timer_.expires_from_now(std::chrono::seconds(10));
- std::size_t n = socket_.async_read_some(boost::asio::buffer(data), yield);
- boost::asio::async_write(socket_, boost::asio::buffer(data, n), yield);
- }
- }
- catch (std::exception& e)
- {
- socket_.close();
- timer_.cancel();
- }
- });
- boost::asio::spawn(strand_,
- [this, self](boost::asio::yield_context yield)
- {
- while (socket_.is_open())
- {
- boost::system::error_code ignored_ec;
- timer_.async_wait(yield[ignored_ec]);
- if (timer_.expires_from_now() <= std::chrono::seconds(0))
- socket_.close();
- }
- });
- }
- private:
- tcp::socket socket_;
- boost::asio::steady_timer timer_;
- boost::asio::io_service::strand strand_;
- };
- int main(int argc, char* argv[])
- {
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: echo_server <port>\n";
- return 1;
- }
- boost::asio::io_service io_service;
- boost::asio::spawn(io_service,
- [&](boost::asio::yield_context yield)
- {
- tcp::acceptor acceptor(io_service,
- tcp::endpoint(tcp::v4(), std::atoi(argv[1])));
- for (;;)
- {
- boost::system::error_code ec;
- tcp::socket socket(io_service);
- acceptor.async_accept(socket, yield[ec]);
- if (!ec) std::make_shared<session>(std::move(socket))->go();
- }
- });
- io_service.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
- return 0;
- }
- + uname -srm
- Linux 3.16.0-7-generic x86_64
- + g++ --version
- g++ (Ubuntu 4.9.1-4ubuntu3) 4.9.1
- Copyright (C) 2014 Free Software Foundation, Inc.
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- + grep '^ii'
- + dpkg -l '*boost*'
- ii libboost-context-dev:amd64 1.55.0.1~ubuntu1 amd64 provides a sort of cooperative multitasking on a single thread (default version)
- ii libboost-context1.55-dev:amd64 1.55.0+dfsg-1ubuntu3 amd64 provides a sort of cooperative multitasking on a single thread
- ii libboost-context1.55.0:amd64 1.55.0+dfsg-1ubuntu3 amd64 provides a sort of cooperative multitasking on a single thread
- ii libboost-coroutine-dev 1.55.0.1~ubuntu1 amd64 provides a sort of cooperative multitasking on a single thread (default version)
- ii libboost-coroutine1.55-dev:amd64 1.55.0+dfsg-1ubuntu3 amd64 provides a sort of cooperative multitasking on a single thread
- ii libboost-date-time1.49.0 1.49.0-4 amd64 set of date-time libraries based on generic programming concepts
- ii libboost-date-time1.55.0:amd64 1.55.0+dfsg-1ubuntu3 amd64 set of date-time libraries based on generic programming concepts
- ii libboost-program-options1.55.0:amd64 1.55.0+dfsg-1ubuntu3 amd64 program options library for C++
- ii libboost-system-dev:amd64 1.55.0.1~ubuntu1 amd64 Operating system (e.g. diagnostics support) library (default version)
- ii libboost-system1.55-dev:amd64 1.55.0+dfsg-1ubuntu3 amd64 Operating system (e.g. diagnostics support) library
- ii libboost-system1.55.0:amd64 1.55.0+dfsg-1ubuntu3 amd64 Operating system (e.g. diagnostics support) library
- ii libboost-thread1.55.0:amd64 1.55.0+dfsg-1ubuntu3 amd64 portable C++ multi-threading
- ii libboost-wave1.55.0:amd64 1.55.0+dfsg-1ubuntu3 amd64 C99/C++ preprocessor library
- ii libboost1.55-dev:amd64 1.55.0+dfsg-1ubuntu3 amd64 Boost C++ Libraries development files
- + g++ -std=c++11 echo_server.cpp -oecho_server -lboost_coroutine -lboost_context -lboost_system -pthread
- + ./echo_server
- Usage: echo_server <port>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement