37 const size_t acceptor_index,
38 openvpn_io::io_context &io_context)
override
41 const HANDLE h = ::CreateNamedPipeA(
43 PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
44 PIPE_REJECT_REMOTE_CLIENTS | PIPE_TYPE_BYTE | PIPE_READMODE_BYTE,
45 PIPE_UNLIMITED_INSTANCES,
52 const openvpn_io::error_code err(::GetLastError(), openvpn_io::error::get_system_category());
53 OPENVPN_THROW(named_pipe_acceptor_error,
"failed to create named pipe: " <<
name <<
" : " << err.message());
59 openvpn_io::windows::overlapped_ptr over(
63 acceptor_index](
const openvpn_io::error_code &ec,
size_t bytes_transferred)
66 listener->
handle_accept(
new AsioPolySock::NamedPipe(std::move(self->handle), acceptor_index),
67 ec.value() == ERROR_PIPE_CONNECTED
68 ? openvpn_io::error_code()
72 const BOOL ok = ::ConnectNamedPipe(
handle.native_handle(), over.get());
73 const DWORD err = ::GetLastError();
74 if (!ok && err != ERROR_IO_PENDING)
81 const openvpn_io::error_code ec(err, openvpn_io::error::get_system_category());