2011-09-07 2 views
0

소켓 연결을 설정하기 위해 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 매개 변수를 가져 오는 방법이 있습니까?

+1

비동기 작업을 사용하지 않는 이유는 무엇입니까? 걱정할 필요가 없습니다. 통화가 차단되지 않으며 데이터가있을 때 알림이 전송됩니다. – Nim

+0

필자는 필요한 경우 보류중인 작업을 중지 할 수 없다는 문제가 여전히 남아 있습니다. 내가 엿볼 수있는 능력과 완료 조건을 제공하는 경우 비동기 작업을 할 수 있지만 비동기 메서드 (예 : async_receive)를 사용하면 필요한 경우 작업을 취소하는 방법을 모르겠습니다. – Brian

+0

주어진 소켓의 경우 뛰어난 비동기 작업을 취소 할 수 있습니다. – Nim

답변

1
나는 그것을 사용하지 않고 버퍼의 데이터를 을 들여다 싶습니다 내가 필요하다면 나는 차단 호출을 막을 수 있도록 완료 조건을 사용하고자하는

.

금지하지 마세요. async_read()async_write()과 같은 비동기 메소드를 사용하십시오. 뛰어난 비동기 작업을 중지하려면 cancel()을 사용하십시오.

관련 문제