From 6b2bf30b0587d168d74af22d5efab96a78d7fdc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD?= Date: Sat, 6 Apr 2024 10:25:40 +0300 Subject: [PATCH] shutdown socket(client) --- boost_boilerplate/CMakeLists.txt | 10 ++++ .../shutdown_and_close_socket.cpp | 53 +++++++++++++++++++ .../shutdown_and_close_socket_server.cpp | 14 +++++ 3 files changed, 77 insertions(+) create mode 100644 boost_boilerplate/src/chapter02_io/shutdown_and_close_socket.cpp create mode 100644 boost_boilerplate/src/chapter02_io/shutdown_and_close_socket_server.cpp diff --git a/boost_boilerplate/CMakeLists.txt b/boost_boilerplate/CMakeLists.txt index 88d108c..b5145dc 100644 --- a/boost_boilerplate/CMakeLists.txt +++ b/boost_boilerplate/CMakeLists.txt @@ -98,3 +98,13 @@ add_executable(cancel_async_operations src/chapter02_io/cancel_async_operations.cpp src/sdk.h) target_link_libraries(cancel_async_operations PRIVATE Threads::Threads) + +add_executable(shutdown_and_close_socket + src/chapter02_io/shutdown_and_close_socket.cpp + src/sdk.h) +target_link_libraries(shutdown_and_close_socket PRIVATE Threads::Threads) + +add_executable(shutdown_and_close_socket_server + src/chapter02_io/shutdown_and_close_socket_server.cpp + src/sdk.h) +target_link_libraries(shutdown_and_close_socket_server PRIVATE Threads::Threads) diff --git a/boost_boilerplate/src/chapter02_io/shutdown_and_close_socket.cpp b/boost_boilerplate/src/chapter02_io/shutdown_and_close_socket.cpp new file mode 100644 index 0000000..d71d32a --- /dev/null +++ b/boost_boilerplate/src/chapter02_io/shutdown_and_close_socket.cpp @@ -0,0 +1,53 @@ +#include +#include +#include +#include + +using namespace boost; +namespace net = boost::asio; +namespace sys = boost::system; +using namespace std; + +void Communicate(net::ip::tcp::socket& sock) +{ + const char request_buf[] {0x48, 0x65, 0x6c, 0x6c, 0x6f}; + + net::write(sock, net::buffer(request_buf)); + sock.shutdown(net::socket_base::shutdown_send); + + net::streambuf response_buf; + sys::error_code ec; + net::read(sock, response_buf, ec); + + if (ec == net::error::eof) + { + cout << "OK! End of file!"s << endl; + } + else + { + throw sys::system_error(ec); + } +} + +int main() +{ + string raw_ip_address = "127.0.0.1"; + const uint16_t port_num = 3333; + + try + { + net::ip::tcp::endpoint ep(net::ip::address::from_string(raw_ip_address), port_num); + net::io_context ios; + + auto sock = make_shared(ios, ep.protocol()); + + sock->connect(ep); + Communicate(*sock); + } + catch (const sys::system_error& err) + { + cout << "Error!" << err.what() << endl; + } + + return EXIT_SUCCESS; +} diff --git a/boost_boilerplate/src/chapter02_io/shutdown_and_close_socket_server.cpp b/boost_boilerplate/src/chapter02_io/shutdown_and_close_socket_server.cpp new file mode 100644 index 0000000..dd9d944 --- /dev/null +++ b/boost_boilerplate/src/chapter02_io/shutdown_and_close_socket_server.cpp @@ -0,0 +1,14 @@ +#include +#include +#include +#include + +using namespace boost; +namespace net = boost::asio; +namespace sys = boost::system; +using namespace std; + +int main() +{ + +}