Ho le due seguenti funzioni per l'invio e la ricezione di pacchetti.boost :: asio :: buffer: recupero della dimensione del buffer e prevenzione dell'overflow del buffer?
void send(std::string protocol)
{
char *request=new char[protocol.size()+1];
request[protocol.size()] = 0;
memcpy(request,protocol.c_str(),protocol.size());
request_length = std::strlen(request);
boost::asio::write(s, boost::asio::buffer(request, request_length));
}
void receive()
{
char reply[max_length];
size_t reply_length = boost::asio::read(s, boost::asio::buffer(reply, request_length));
std::cout << "Reply is: ";
std::cout.write(reply, reply_length);
std::cout << "\n";
}
Le domande riguardano questa parte boost::asio::buffer(reply, request_length)
cui la lunghezza richiesta è la lunghezza di una stringa che inizialmente era configurazione quando il pacchetto è stato inviato. Come posso controllare la dimensione del buffer senza conoscere request_length
? Un'altra domanda è come impedire l'overflow del buffer?
Grandi cose. 'boost :: asio :: streambuff' con' boost :: asio :: read_until() 'ha funzionato bene nel caso in cui i messaggi terminassero con un delimitatore. –