728x90
반응형
async_compose
Stateful(서버에서 클라이언트의 동작 상태 정보를 저장하는 형태) 구현으로 비동기 작업을 시작한다.
template<
typename CompletionToken,
typename Signature,
typename Implementation,
typename... IoObjectsOrExecutors>
DEDUCED async_compose(
Implementation && implementation,
CompletionToken & token,
IoObjectsOrExecutors &&... io_objects_or_executors);
[DEDUCED]
async_compose 함수는 적합한 중간 완료 핸들러로 stateful 함수 개체를 자동으로 래핑하는 합성된 비동기 작업의 구현을 단순화한다.
파라미터
implementation
합성된 비동기 작업의 구현을 포함하는 함수 개체이다. 함수 개체의 첫 번째 인수는 감싸고 있는 중간 핸들러에 대한 const가 아닌 참조이다. 나머지 인수는 구현에 의해 수행되는 비동기 작업의 완료 핸들러에서 발생하는 인수이다.
token
완료 토큰
io_objects_or_executors
아직 처리되지 않은 작업을 유지해야하는 0개 이상의 I/O 개체 또는 I/O 실행기(executor)
예제
struct async_echo_implementation
{
tcp::socket& socket_;
boost::asio::mutable_buffer buffer_;
enum { starting, reading, writing } state_;
template <typename Self>
void operator()(Self& self,
boost::system::error_code error = {},
std::size_t n = 0)
{
switch (state_)
{
case starting:
state_ = reading;
socket_.async_read_some(
buffer_, std::move(self));
break;
case reading:
if (error)
{
self.complete(error, 0);
}
else
{
state_ = writing;
boost::asio::async_write(socket_, buffer_,
boost::asio::transfer_exactly(n),
std::move(self));
}
break;
case writing:
self.complete(error, n);
break;
}
}
};
template <typename CompletionToken>
auto async_echo(tcp::socket& socket,
boost::asio::mutable_buffer buffer,
CompletionToken&& token) ->
typename boost::asio::async_result<
typename std::decay<CompletionToken>::type,
void(boost::system::error_code, std::size_t)>::return_type
{
return boost::asio::async_compose<CompletionToken,
void(boost::system::error_code, std::size_t)>(
async_echo_implementation{socket, buffer,
async_echo_implementation::starting},
token, socket);
}
요구사항
일반 헤더: boost/asio/compose.hpp
편의 헤더: boost/asio.hpp
Boost.Asio 홈
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 색인 - basic_datagram_socket::async_connect (0) | 2021.01.06 |
---|---|
Boost.Asio 색인 - async_connect (0) | 2021.01.06 |
Boost.Asio 색인 - async_completion::async_completion (0) | 2021.01.06 |
Boost.Asio 색인 - basic_socket_acceptor::async_accept (0) | 2021.01.06 |
Boost.Asio 색인 - windows::basic_stream_handle::assign (0) | 2021.01.05 |