void SmppClient::readPduBlocking() {
optional<error_code> ioResult;
optional<error_code> timerResult;
shared_array<uint8_t> pduHeader(new uint8_t[4]);
async_read(*socket, boost::asio::buffer(pduHeader.get(), 4),
boost::bind(&SmppClient::readPduHeaderHandlerBlocking, this, &ioResult, _1, _2, pduHeader));
deadline_timer timer(getIoService());
timer.expires_from_now(boost::posix_time::milliseconds(socketReadTimeout));
timer.async_wait(boost::bind(&SmppClient::handleTimeout, this, &timerResult, _1));
while(getIoService().run_one())
{
if (ioResult) {
timer.cancel();
} else if (timerResult) {
socket->cancel();
}
}
getIoService().reset();
}
changes: