나는 boost :: asio 사용하여 비동기 적으로 읽으려고하는 네이티브 posix 소켓 있습니다 : : async_read. 그러나 이렇게하면 :boost :: asio :: async_read 실패하지만 boost :: asio :: read 작동합니다 (io_stream.run_one() 사용)
// io_stream and fd are passed by reference to this function
asio::posix::stream_descriptor stream(io_stream);
stream.assign(fd);
boost::system::error_code ec;
asio::async_read(stream, buffer,
asio::transfer_at_least(1),
boost::bind(doRead,
asio::placeholders::error,
asio::placeholders::bytes_transferred));
size_t count = io_service.run_one(ec);
카운트 변수는 0으로 설정되고 doRead 처리기는 호출되지 않으며 ec에는 오류가 없습니다. 나는 동기 읽기와 비동기 읽기를 대체 그러나 경우 :
size_t count = asio::read(stream, buffer,
asio::transfer_at_least(1));
을이 작품과 내가 다시 카운트 변수에 예상 된 양의 데이터를 얻을.
"int pipe (int pipefd [2]);"에 의해 작성된 fd를 사용하는 테스트 케이스
- 그것이 내가 전달하고 기본 기술자가 어떤 방법으로 async_read와 호환되지 않습니다 방법을 일부하므로 : 및 ASIO :: async_read와 그 잘 작동을 통해 데이터를 전달 그래서 나는 몇 가지 옵션이 될 수있다 생각하고 조용히 실패했다. 나는 아무 쓸모없이 on/off를 막아서 그것을 만들려고 노력했다.
- io_service와 posix :: stream_descriptor는 어떻게 연결되지 않으므로 io_service는 절대로 읽기를 실행하지 않습니다. 이것이 내가 참조로 io_service를 전달했기 때문일 수 있습니까? (그리고 몇 가지 스레드 내에서 그 문제에 대해서도 마찬가지입니까?)
'stream_descriptor'는'pipe'의 읽기 끝에있는 디스크립터로 잘 동작합니다. [this] (http://stackoverflow.com/questions/5210796/boost-asio-how-to-write- 콘솔 서버/5211349 # 5211349) 대답. 두 번째 총알이 당신이 보는 행동의 원인이라고 생각합니다. 질문을 편집하고 분석 할 수 있도록 [짧고, 독립적 인, 올바른 예] (http://sscce.org/)를 포함하십시오. –
집에서 코드를 갖고 있지 않기 때문에 직장에서 월요일에 함께 할 것입니다. 감사합니다! –