boost::asio::read_until problem

12/14/2013 19:01 EasyTale#1
N' Abend,

ich habe ein kleines Problem, und zwar liest boost::asio::read_until Bytes bis zu einem bestimmten Delimiter, es kann aber durchaus vorkommen das mehr Daten im Receive Buffer geschrieben werden, als der Delimiter endet.

Quote:
After a successful read_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent read_until operation to examine.
Somit habe ich mir etwas geschrieben, um alle vollständigen Packets von dem Receive Buffer zu bekommen, dass klappt auch soweit.
Das Problem hierbei ist aber, wenn ein unvollständiges Packet am Ende steht, versucht er es zu verarbeiten und anschließend zu löschen.(logisch warum)


Es gibt keine 0 terminierenden Packets, bevor jemand fragt. ;o
Code:
std::string packet_sequence;
std::istream stream(&_bufReceive);
while(!std::getline(stream, packet_sequence, static_cast<char>(buf_delim)).eof())
{
	_packetHandler->process(_packetEncoding->decryptLoginPacket(packet_sequence));
	_bufReceive.consume(packet_sequence.size());
}
Beispiel vollständiges Packet (0xFF = Packet end):
Code:
request_login <user> <password> 0xFF
Beispiel unvollständiges Packet (first call):
Code:
request_login <user> <password> 0xFF request_something <so
Um das Problem zu lösen, müsste std::getline den letzten Abschnitt ignorieren, da dort das 0xFF fehlt.

Packet (second call):
Code:
mething> 0xFF
Ich könnte jetzt einfach eine eigene Split-Funktion schreiben, aber mir währe es lieber den obigen Code um eine Funktion ergänzen zu können und deswegen frage ich euch, ob wer eine Idee parat hätte.