Skip to content

Commit f32951c

Browse files
committed
fix: add cancellation support for Windows socket connect
- Add impl reference and do_cancel() override to connect_op struct - Implement connect_op::do_cancel() calling CancelIoEx on the socket - Initialize conn_ member with socket impl reference in constructor
1 parent 791cbb6 commit f32951c

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

src/detail/win_iocp_sockets.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,22 @@ do_cancel() noexcept
111111
}
112112
}
113113

114+
void
115+
connect_op::
116+
do_cancel() noexcept
117+
{
118+
if (impl.is_open())
119+
{
120+
::CancelIoEx(
121+
reinterpret_cast<HANDLE>(impl.native_handle()),
122+
this);
123+
}
124+
}
125+
114126
win_socket_impl::
115127
win_socket_impl(win_iocp_sockets& svc) noexcept
116128
: svc_(svc)
129+
, conn_(*this)
117130
, rd_(*this)
118131
, wr_(*this)
119132
{

src/detail/win_iocp_sockets.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ class win_acceptor_impl;
4040
/** Connect operation state. */
4141
struct connect_op : overlapped_op
4242
{
43+
win_socket_impl& impl;
44+
45+
explicit connect_op(win_socket_impl& impl_) noexcept : impl(impl_) {}
46+
47+
void do_cancel() noexcept override;
4348
};
4449

4550
/** Read operation state with buffer descriptors. */

0 commit comments

Comments
 (0)