cancel operation
This commit is contained in:
parent
cf37d36353
commit
b96e9e885f
|
@ -93,3 +93,8 @@ add_executable(reading_tcp_async
|
|||
src/chapter02_io/reading_tcp_async.cpp
|
||||
src/sdk.h)
|
||||
target_link_libraries(reading_tcp_async PRIVATE Threads::Threads)
|
||||
|
||||
add_executable(cancel_async_operations
|
||||
src/chapter02_io/cancel_async_operations.cpp
|
||||
src/sdk.h)
|
||||
target_link_libraries(cancel_async_operations PRIVATE Threads::Threads)
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
#include <boost/predef.h>
|
||||
|
||||
#ifdef BOOST_OS_WINDOWS
|
||||
#define _WIN32_WINNT 0x0501
|
||||
|
||||
#if _WIN32_WINNT <= 0x0502
|
||||
|
||||
#define BOOST_ASIO_DISABLE_IOCF
|
||||
#define BOOST_ASIO_ENABLE_CANCELIO
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <boost/asio.hpp>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
using namespace boost;
|
||||
namespace net = boost::asio;
|
||||
namespace sys = boost::system;
|
||||
using namespace std;
|
||||
|
||||
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<net::ip::tcp::socket>(ios, ep.protocol());
|
||||
|
||||
sock->async_connect(ep, [sock](const sys::error_code& ec)
|
||||
{
|
||||
if (ec)
|
||||
{
|
||||
if (ec == net::error::operation_aborted)
|
||||
{
|
||||
cout << "Operation cancelled";
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "Error occured"
|
||||
<< "\nError code = " << ec.value()
|
||||
<< "\nMessage: " << ec.what();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
thread worker_thread([&ios]()
|
||||
{
|
||||
try
|
||||
{
|
||||
ios.run();
|
||||
}
|
||||
catch (const sys::system_error& err)
|
||||
{
|
||||
cout << "Error occured"
|
||||
<< "\nError code = " << err.code()
|
||||
<< "\nMessage: " << err.what();
|
||||
}
|
||||
});
|
||||
|
||||
this_thread::sleep_for(chrono::seconds(2));
|
||||
sock->cancel();
|
||||
worker_thread.join();
|
||||
}
|
||||
catch (const sys::system_error& err)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue