Simulate proposed error code enums using namespaces.
This commit is contained in:
parent
c69b9e20a2
commit
4cd5149798
@ -314,6 +314,22 @@ inline asio::error_code make_error_code(misc_errors e)
|
||||
}
|
||||
|
||||
} // namespace error
|
||||
namespace stream_errc {
|
||||
// Simulates the proposed stream_errc scoped enum.
|
||||
using error::eof;
|
||||
using error::not_found;
|
||||
} // namespace stream_errc
|
||||
namespace socket_errc {
|
||||
// Simulates the proposed socket_errc scoped enum.
|
||||
using error::already_open;
|
||||
using error::not_found;
|
||||
} // namespace socket_errc
|
||||
namespace resolver_errc {
|
||||
// Simulates the proposed resolver_errc scoped enum.
|
||||
using error::host_not_found;
|
||||
using error::host_not_found_try_again;
|
||||
using error::service_not_found;
|
||||
} // namespace resolver_errc
|
||||
} // namespace asio
|
||||
|
||||
#include "asio/detail/pop_options.hpp"
|
||||
|
@ -10,6 +10,12 @@ LDADD = libasio.a
|
||||
endif
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
echo/async_tcp_echo_server \
|
||||
echo/async_udp_echo_server \
|
||||
echo/blocking_tcp_echo_client \
|
||||
echo/blocking_tcp_echo_server \
|
||||
echo/blocking_udp_echo_client \
|
||||
echo/blocking_udp_echo_server \
|
||||
executors/actor \
|
||||
executors/async_1 \
|
||||
executors/async_2 \
|
||||
@ -22,6 +28,12 @@ noinst_PROGRAMS = \
|
||||
|
||||
AM_CXXFLAGS = -I$(srcdir)/../../../include
|
||||
|
||||
echo_async_tcp_echo_server_SOURCES = echo/async_tcp_echo_server.cpp
|
||||
echo_async_udp_echo_server_SOURCES = echo/async_udp_echo_server.cpp
|
||||
echo_blocking_tcp_echo_client_SOURCES = echo/blocking_tcp_echo_client.cpp
|
||||
echo_blocking_tcp_echo_server_SOURCES = echo/blocking_tcp_echo_server.cpp
|
||||
echo_blocking_udp_echo_client_SOURCES = echo/blocking_udp_echo_client.cpp
|
||||
echo_blocking_udp_echo_server_SOURCES = echo/blocking_udp_echo_server.cpp
|
||||
executors_actor_SOURCES = executors/actor.cpp
|
||||
executors_async_1_SOURCES = executors/async_1.cpp
|
||||
executors_async_2_SOURCES = executors/async_2.cpp
|
||||
|
11
asio/src/examples/cpp14/echo/.gitignore
vendored
Normal file
11
asio/src/examples/cpp14/echo/.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
.deps
|
||||
.dirstamp
|
||||
*.o
|
||||
*.obj
|
||||
*.exe
|
||||
*_server
|
||||
*_client
|
||||
*.ilk
|
||||
*.manifest
|
||||
*.pdb
|
||||
*.tds
|
117
asio/src/examples/cpp14/echo/async_tcp_echo_server.cpp
Normal file
117
asio/src/examples/cpp14/echo/async_tcp_echo_server.cpp
Normal file
@ -0,0 +1,117 @@
|
||||
//
|
||||
// async_tcp_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 <cstdlib>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <asio/ts/buffer.hpp>
|
||||
#include <asio/ts/internet.hpp>
|
||||
|
||||
using asio::ip::tcp;
|
||||
|
||||
class session
|
||||
: public std::enable_shared_from_this<session>
|
||||
{
|
||||
public:
|
||||
session(tcp::socket socket)
|
||||
: socket_(std::move(socket))
|
||||
{
|
||||
}
|
||||
|
||||
void start()
|
||||
{
|
||||
do_read();
|
||||
}
|
||||
|
||||
private:
|
||||
void do_read()
|
||||
{
|
||||
auto self(shared_from_this());
|
||||
socket_.async_read_some(asio::buffer(data_, max_length),
|
||||
[this, self](std::error_code ec, std::size_t length)
|
||||
{
|
||||
if (!ec)
|
||||
{
|
||||
do_write(length);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void do_write(std::size_t length)
|
||||
{
|
||||
auto self(shared_from_this());
|
||||
asio::async_write(socket_, asio::buffer(data_, length),
|
||||
[this, self](std::error_code ec, std::size_t /*length*/)
|
||||
{
|
||||
if (!ec)
|
||||
{
|
||||
do_read();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
tcp::socket socket_;
|
||||
enum { max_length = 1024 };
|
||||
char data_[max_length];
|
||||
};
|
||||
|
||||
class server
|
||||
{
|
||||
public:
|
||||
server(asio::io_service& io_service, short port)
|
||||
: acceptor_(io_service, tcp::endpoint(tcp::v4(), port)),
|
||||
socket_(io_service)
|
||||
{
|
||||
do_accept();
|
||||
}
|
||||
|
||||
private:
|
||||
void do_accept()
|
||||
{
|
||||
acceptor_.async_accept(socket_,
|
||||
[this](std::error_code ec)
|
||||
{
|
||||
if (!ec)
|
||||
{
|
||||
std::make_shared<session>(std::move(socket_))->start();
|
||||
}
|
||||
|
||||
do_accept();
|
||||
});
|
||||
}
|
||||
|
||||
tcp::acceptor acceptor_;
|
||||
tcp::socket socket_;
|
||||
};
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try
|
||||
{
|
||||
if (argc != 2)
|
||||
{
|
||||
std::cerr << "Usage: async_tcp_echo_server <port>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
asio::io_service io_service;
|
||||
|
||||
server s(io_service, std::atoi(argv[1]));
|
||||
|
||||
io_service.run();
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Exception: " << e.what() << "\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
83
asio/src/examples/cpp14/echo/async_udp_echo_server.cpp
Normal file
83
asio/src/examples/cpp14/echo/async_udp_echo_server.cpp
Normal file
@ -0,0 +1,83 @@
|
||||
//
|
||||
// async_udp_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 <cstdlib>
|
||||
#include <iostream>
|
||||
#include <asio/ts/buffer.hpp>
|
||||
#include <asio/ts/internet.hpp>
|
||||
|
||||
using asio::ip::udp;
|
||||
|
||||
class server
|
||||
{
|
||||
public:
|
||||
server(asio::io_service& io_service, short port)
|
||||
: socket_(io_service, udp::endpoint(udp::v4(), port))
|
||||
{
|
||||
do_receive();
|
||||
}
|
||||
|
||||
void do_receive()
|
||||
{
|
||||
socket_.async_receive_from(
|
||||
asio::buffer(data_, max_length), sender_endpoint_,
|
||||
[this](std::error_code ec, std::size_t bytes_recvd)
|
||||
{
|
||||
if (!ec && bytes_recvd > 0)
|
||||
{
|
||||
do_send(bytes_recvd);
|
||||
}
|
||||
else
|
||||
{
|
||||
do_receive();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void do_send(std::size_t length)
|
||||
{
|
||||
socket_.async_send_to(
|
||||
asio::buffer(data_, length), sender_endpoint_,
|
||||
[this](std::error_code /*ec*/, std::size_t /*bytes_sent*/)
|
||||
{
|
||||
do_receive();
|
||||
});
|
||||
}
|
||||
|
||||
private:
|
||||
udp::socket socket_;
|
||||
udp::endpoint sender_endpoint_;
|
||||
enum { max_length = 1024 };
|
||||
char data_[max_length];
|
||||
};
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try
|
||||
{
|
||||
if (argc != 2)
|
||||
{
|
||||
std::cerr << "Usage: async_udp_echo_server <port>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
asio::io_service io_service;
|
||||
|
||||
server s(io_service, std::atoi(argv[1]));
|
||||
|
||||
io_service.run();
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Exception: " << e.what() << "\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
55
asio/src/examples/cpp14/echo/blocking_tcp_echo_client.cpp
Normal file
55
asio/src/examples/cpp14/echo/blocking_tcp_echo_client.cpp
Normal file
@ -0,0 +1,55 @@
|
||||
//
|
||||
// blocking_tcp_echo_client.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 <cstdlib>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include "asio.hpp"
|
||||
|
||||
using asio::ip::tcp;
|
||||
|
||||
enum { max_length = 1024 };
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try
|
||||
{
|
||||
if (argc != 3)
|
||||
{
|
||||
std::cerr << "Usage: blocking_tcp_echo_client <host> <port>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
asio::io_service io_service;
|
||||
|
||||
tcp::socket s(io_service);
|
||||
tcp::resolver resolver(io_service);
|
||||
asio::connect(s, resolver.resolve({argv[1], argv[2]}));
|
||||
|
||||
std::cout << "Enter message: ";
|
||||
char request[max_length];
|
||||
std::cin.getline(request, max_length);
|
||||
size_t request_length = std::strlen(request);
|
||||
asio::write(s, asio::buffer(request, request_length));
|
||||
|
||||
char reply[max_length];
|
||||
size_t reply_length = asio::read(s,
|
||||
asio::buffer(reply, request_length));
|
||||
std::cout << "Reply is: ";
|
||||
std::cout.write(reply, reply_length);
|
||||
std::cout << "\n";
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Exception: " << e.what() << "\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
77
asio/src/examples/cpp14/echo/blocking_tcp_echo_server.cpp
Normal file
77
asio/src/examples/cpp14/echo/blocking_tcp_echo_server.cpp
Normal file
@ -0,0 +1,77 @@
|
||||
//
|
||||
// blocking_tcp_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 <cstdlib>
|
||||
#include <iostream>
|
||||
#include <thread>
|
||||
#include <utility>
|
||||
#include <asio/ts/buffer.hpp>
|
||||
#include <asio/ts/internet.hpp>
|
||||
|
||||
using asio::ip::tcp;
|
||||
|
||||
const int max_length = 1024;
|
||||
|
||||
void session(tcp::socket sock)
|
||||
{
|
||||
try
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
char data[max_length];
|
||||
|
||||
std::error_code error;
|
||||
size_t length = sock.read_some(asio::buffer(data), error);
|
||||
if (error == asio::stream_errc::eof)
|
||||
break; // Connection closed cleanly by peer.
|
||||
else if (error)
|
||||
throw std::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_service& io_service, unsigned short port)
|
||||
{
|
||||
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
|
||||
for (;;)
|
||||
{
|
||||
tcp::socket sock(io_service);
|
||||
a.accept(sock);
|
||||
std::thread(session, std::move(sock)).detach();
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try
|
||||
{
|
||||
if (argc != 2)
|
||||
{
|
||||
std::cerr << "Usage: blocking_tcp_echo_server <port>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
asio::io_service io_service;
|
||||
|
||||
server(io_service, std::atoi(argv[1]));
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Exception: " << e.what() << "\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
58
asio/src/examples/cpp14/echo/blocking_udp_echo_client.cpp
Normal file
58
asio/src/examples/cpp14/echo/blocking_udp_echo_client.cpp
Normal file
@ -0,0 +1,58 @@
|
||||
//
|
||||
// blocking_udp_echo_client.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 <cstdlib>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <asio/ts/buffer.hpp>
|
||||
#include <asio/ts/internet.hpp>
|
||||
|
||||
using asio::ip::udp;
|
||||
|
||||
enum { max_length = 1024 };
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try
|
||||
{
|
||||
if (argc != 3)
|
||||
{
|
||||
std::cerr << "Usage: blocking_udp_echo_client <host> <port>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
asio::io_service io_service;
|
||||
|
||||
udp::socket s(io_service, udp::endpoint(udp::v4(), 0));
|
||||
|
||||
udp::resolver resolver(io_service);
|
||||
udp::endpoint endpoint = *resolver.resolve({udp::v4(), argv[1], argv[2]});
|
||||
|
||||
std::cout << "Enter message: ";
|
||||
char request[max_length];
|
||||
std::cin.getline(request, max_length);
|
||||
size_t request_length = std::strlen(request);
|
||||
s.send_to(asio::buffer(request, request_length), endpoint);
|
||||
|
||||
char reply[max_length];
|
||||
udp::endpoint sender_endpoint;
|
||||
size_t reply_length = s.receive_from(
|
||||
asio::buffer(reply, max_length), sender_endpoint);
|
||||
std::cout << "Reply is: ";
|
||||
std::cout.write(reply, reply_length);
|
||||
std::cout << "\n";
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Exception: " << e.what() << "\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
53
asio/src/examples/cpp14/echo/blocking_udp_echo_server.cpp
Normal file
53
asio/src/examples/cpp14/echo/blocking_udp_echo_server.cpp
Normal file
@ -0,0 +1,53 @@
|
||||
//
|
||||
// blocking_udp_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 <cstdlib>
|
||||
#include <iostream>
|
||||
#include <asio/ts/buffer.hpp>
|
||||
#include <asio/ts/internet.hpp>
|
||||
|
||||
using asio::ip::udp;
|
||||
|
||||
enum { max_length = 1024 };
|
||||
|
||||
void server(asio::io_service& io_service, unsigned short port)
|
||||
{
|
||||
udp::socket sock(io_service, udp::endpoint(udp::v4(), port));
|
||||
for (;;)
|
||||
{
|
||||
char data[max_length];
|
||||
udp::endpoint sender_endpoint;
|
||||
size_t length = sock.receive_from(
|
||||
asio::buffer(data, max_length), sender_endpoint);
|
||||
sock.send_to(asio::buffer(data, length), sender_endpoint);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try
|
||||
{
|
||||
if (argc != 2)
|
||||
{
|
||||
std::cerr << "Usage: blocking_udp_echo_server <port>\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
asio::io_service io_service;
|
||||
|
||||
server(io_service, std::atoi(argv[1]));
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Exception: " << e.what() << "\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user