bool protobuf_sync_message_serialization::Write(const void* buffer, int size)
{
+ std::size_t written = 0;
try {
- boost::asio::write(fSocket, boost::asio::buffer(buffer, size));
+ written = boost::asio::write(fSocket, boost::asio::buffer(buffer, size));
} catch(...) {
return false;
}
- return true;
+ return static_cast<int>(written) == size;
}
protobuf_sync_message_deserialization::protobuf_sync_message_deserialization(
{
google::protobuf::uint8 header[4];
google::protobuf::uint32 length;
- boost::asio::read(fSocket, boost::asio::buffer(header));
+
+ try {
+ boost::asio::read(fSocket, boost::asio::buffer(header));
+ } catch(...) {
+ throw std::invalid_argument("Error while reading message");
+ }
+
google::protobuf::io::CodedInputStream::ReadLittleEndian32FromArray(header, &length);
if(length < 1 || length > MESSAGE_LENGHT_MAX) {
std::unique_ptr<char[]> local_array(new char[length]);
- boost::asio::read(fSocket, boost::asio::buffer(local_array.get(), length));
+ try {
+ boost::asio::read(fSocket, boost::asio::buffer(local_array.get(), length));
+ } catch(...) {
+ throw std::invalid_argument("Error while reading message");
+ }
if(!message.ParseFromArray(local_array.get(), length)) {
throw std::invalid_argument("Invalid message format");