소켓 연결을 설정하기 위해 Boost Asio를 사용하고 있습니다. 버퍼를 사용하지 않고 버퍼의 데이터를 들여다보고 싶습니다. 필요한 경우 차단 호출을 중지 할 수 있도록 완료 조건을 사용하고 싶습니다.부스트 Asio 피크 및 완료 조건
나는 basic_stream_socket::receive에서 들여다 기능을 얻을 수 있습니다 가능한 message_flags의
template<
typename MutableBufferSequence>
std::size_t receive(
const MutableBufferSequence & buffers,
socket_base::message_flags flags,
boost::system::error_code & ec);
하나는 basic_stream_socket::message_peek입니다. 그러나이 호출은 적어도 하나의 바이트가 읽히거나 오류가 발생할 때까지 차단됩니다. 나는 read에서 완료 조건 기능을 얻을 수 있습니다 :
template<
typename SyncReadStream,
typename MutableBufferSequence,
typename CompletionCondition>
std::size_t read(
SyncReadStream & s,
const MutableBufferSequence & buffers,
CompletionCondition completion_condition,
boost::system::error_code & ec);
나는 전화가 계속하기 전에 중단해야하는지 여부를 확인하는 completion_condition 방법을 제공 할 수있다.
내 질문은 : 동일한 메서드 호출에서 message_flags 매개 변수와 completion_condition 매개 변수를 가져 오는 방법이 있습니까?
비동기 작업을 사용하지 않는 이유는 무엇입니까? 걱정할 필요가 없습니다. 통화가 차단되지 않으며 데이터가있을 때 알림이 전송됩니다. – Nim
필자는 필요한 경우 보류중인 작업을 중지 할 수 없다는 문제가 여전히 남아 있습니다. 내가 엿볼 수있는 능력과 완료 조건을 제공하는 경우 비동기 작업을 할 수 있지만 비동기 메서드 (예 : async_receive)를 사용하면 필요한 경우 작업을 취소하는 방법을 모르겠습니다. – Brian
주어진 소켓의 경우 뛰어난 비동기 작업을 취소 할 수 있습니다. – Nim