
Hi
Note that if poll_one() exits due to "out of work", you have to call io_service::reset()
I am not sure that this is my problem... I have added some more debug code prints: void set_result( boost::optionalboost::system::error_code * a, boost::system::error_code b ) { a->reset( b ); } void receive(boost::asio::io_service & io, boost::asio::serial_port & cctalk_port, boost::asio::streambuf & result){ boost::optionalboost::system::error_code timer_result; boost::optionalboost::system::error_code read_result; boost::asio::deadline_timer timer( io ); LOG(INFO) << "Timer at 5000ms starts here"; timer.expires_from_now( boost::posix_time::milliseconds(5000) ); timer.async_wait( boost::bind(&set_result, &timer_result, _1) ); LOG(INFO) << "Async read starts here"; boost::asio::async_read( cctalk_port, result, boost::asio::transfer_at_least(1), boost::bind( &set_result, &read_result, _1 )); boost::system::error_code ec; while(1) { io.poll_one(ec); if( ec != 0 || read_result != 0 || timer_result != 0) LOG(INFO) << "Error code: " << ec << " read_result: " << read_result << " timer_result: " << timer_result; if ( read_result ) { timer.cancel(); LOG(INFO) << "Result ready"; return; } else if ( timer_result ) { LOG(INFO) << "Timeout"; throw runtime_error("timeout"); } } LOG(INFO) << "Not suppose to happen"; } When this function is called twice I got the following output: I0808 16:27:31.632927 31531 ccTalkScan.cxx:92] Timer at 5000ms starts here I0808 16:27:31.632993 31531 ccTalkScan.cxx:96] Async read starts here I0808 16:27:31.633018 31531 ccTalkScan.cxx:108] Error code: system:0 read_result: 1 timer_result: 0 I0808 16:27:31.633026 31531 ccTalkScan.cxx:112] Result ready I0808 16:27:31.633080 31531 ccTalkScan.cxx:92] Timer at 5000ms starts here I0808 16:27:31.633095 31531 ccTalkScan.cxx:96] Async read starts here I0808 16:27:31.633112 31531 ccTalkScan.cxx:108] Error code: system:0 read_result: 0 timer_result: 1 I0808 16:27:31.633121 31531 ccTalkScan.cxx:116] Timeout So, what I do not understand is why does the timeout event occur after 32 ms, when I have specified 5000? -- Allan W. Nielsen