Sha256: 094c4ed7aaa962707ab826447aff54524adf2a1274d073c85308e283565d1ed7
Contents?: true
Size: 1.67 KB
Versions: 16
Compression:
Stored size: 1.67 KB
Contents
// // blocking_tcp_echo_server.cpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2003-2020 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 <cstdlib> #include <iostream> #include <boost/bind/bind.hpp> #include <boost/smart_ptr.hpp> #include "asio.hpp" using asio::ip::tcp; const int max_length = 1024; typedef boost::shared_ptr<tcp::socket> socket_ptr; void session(socket_ptr sock) { try { for (;;) { char data[max_length]; asio::error_code error; size_t length = sock->read_some(asio::buffer(data), error); if (error == asio::error::eof) break; // Connection closed cleanly by peer. else if (error) throw asio::system_error(error); // Some other error. asio::write(*sock, asio::buffer(data, length)); } } catch (std::exception& e) { std::cerr << "Exception in thread: " << e.what() << "\n"; } } void server(asio::io_context& io_context, unsigned short port) { tcp::acceptor a(io_context, tcp::endpoint(tcp::v4(), port)); for (;;) { socket_ptr sock(new tcp::socket(io_context)); a.accept(*sock); asio::thread t(boost::bind(session, sock)); } } int main(int argc, char* argv[]) { try { if (argc != 2) { std::cerr << "Usage: blocking_tcp_echo_server <port>\n"; return 1; } asio::io_context io_context; using namespace std; // For atoi. server(io_context, atoi(argv[1])); } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } return 0; }
Version data entries
16 entries across 16 versions & 1 rubygems