diff --git a/blocking_tcp_echo_server.cpp b/blocking_tcp_echo_server.cpp index f3b25514..6edc34c7 100644 --- a/blocking_tcp_echo_server.cpp +++ b/blocking_tcp_echo_server.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include // localtime #include // stringstream #include @@ -61,18 +62,12 @@ public: for (;;) { shared_ptr chunk(chunks.pop()); - boost::system::error_code error; size_t written = 0; do { written += boost::asio::write(*socket_, boost::asio::buffer(chunk.get() + written, sizeof(WireChunk) - written));//, error); } while (written < sizeof(WireChunk)); - - if (error == boost::asio::error::eof) - break; // Connection closed cleanly by peer. - else if (error) - throw boost::system::system_error(error); // Some other error. } } catch (std::exception& e) @@ -102,7 +97,7 @@ private: class Server { public: - Server(unsigned short port) : session(NULL), port_(port) + Server(unsigned short port) : port_(port) { } @@ -114,15 +109,19 @@ public: socket_ptr sock(new tcp::socket(io_service_)); a.accept(*sock); cout << "New connection: " << sock->remote_endpoint().address().to_string() << "\n"; - session = new Session(sock); + Session* session = new Session(sock); session->start(); + sessions.push_back(session); } } void send(shared_ptr chunk) - { - if (session != 0) - session->send(chunk); + { + for (size_t n=0; nsend(chunk); + } } void start() @@ -136,7 +135,7 @@ public: } private: - Session* session; + vector sessions; boost::asio::io_service io_service_; unsigned short port_; thread* acceptThread;