I am using Boost Asio Library. I am facing difficulty while using boost::async_read() operation. I am using like this. The sample code for server asio read operation is given below.
void HandleClient::StartHandling()
{
auto self(shared_from_this());
asio::async_read_until(m_Sock,
m_Request,
DELIMITER,
[this, self](
const boost::system::error_code& a_Ec,
std::size_t a_BytesRead)
{
onRequestReceived(a_Ec, a_BytesRead);
});
}
void HandleClient::onRequestReceived(const system::error_code &a_Ec,
std::size_t a_BytesRead)
{
if(a_Ec)
{....}
auto self(shared_from_this());
if(a_BytesRead > 0)
{
auto response = ProcessData(m_Request);
if(!response.empty())
{
m_Data = response + DELIMITER;
asio::async_write(m_Sock, asio::buffer(m_Data),
[this, self](boost::system::error_code& a_Ec, std::size_t
a_Bytestransferred))
{
response_sent(a_Ec, a_Bytestransferred);
});
}
asio::async_read_until(
m_Sock,
m_Request,
DELIMITER,
[this, self](const boost::system::error_code& a_Ec, std::size_t
a_BytesRead)
{
onRequestReceived(a_Ec, a_BytesRead);
});
}
It is getting crashed after some iteration. The crash is random. Client side code is in form of synchronous call. I hope it is not issue. The error message I am getting debug assertion failed message:
Debug assertion failed Program:xx/vc/tools/msvc/14.16.27023/include/xstring Line 1427. Expression cannot deference string iteration because the iterator was invalidated (e.g. reallocation occurred, or the string was destroyed)