У меня есть настройка сервера с использованием Boost Asio, это нормально, когда дело доходит до принятия новых подключений и обработки их. Однако, когда я пытаюсь буферизовать char*
данные в сокет, используя async_write_some
, я получаю сообщение об ошибке нарушения прав чтения.
Похоже, проблема связана с временем жизни объекта буфера? Я искал различные решения этой проблемы, но мне еще не удалось найти решение, которое не взломало бы sh сервер.
Вот некоторый код
void Session::ListenForPacket()
{
m_socket.async_read_some(
boost::asio::buffer(m_buffer, MAX_BYTE_LENGTH),
boost::bind(&Session::HandleRead, this, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)
);
}
void Session::HandleRead(boost::shared_ptr<Session> session, const boost::system::error_code& error, size_t bytes_transferred)
{
if (!error)
{
m_outboundPacket = new char[20];
m_outboundPacket = "TESTPACKET";
SendPacket();
}
}
void Session::SendPacket()
{
m_socket.async_write_some(
boost::asio::buffer(m_outboundPacket, 5), // using 5 as an arbitrary amount of bytes to read
boost::bind(&Session::HandleWrite, this, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)
); // CRASHES HERE
}
void Session::HandleWrite(boost::shared_ptr<Session> session, const boost::system::error_code& error, size_t bytes_transferred)
{
std::cout << *data << std::endl;
if (!error)
{
std::cout << "Packet send successful" << std::endl;
}
}
Вот декларации переменных-членов
char* m_outboundPacket;
char m_buffer[MAX_BYTE_LENGTH];
Я пытался сохранить данные char*
в boost::shared_ptr
и передать ptr моей функции HandleWrite
, но она тоже не сработала ...
Любые советы о том, как решить эту проблему, будут высоко оценены.
Спасибо!