correct sanity checks for client/server communication

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1933 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
hsc
2012-11-14 13:31:53 +00:00
parent b8a4797360
commit 49d1608969
3 changed files with 48 additions and 27 deletions

View File

@ -9,17 +9,16 @@ bool SocketComm::sendMsg(int sockfd, google::protobuf::Message& msg)
{
#ifdef USE_SIZE_PREFIX
int size = htonl(msg.ByteSize());
if (safe_write(sockfd, &size, sizeof(size)) == -1) {
return false;
}
std::string buf;
msg.SerializeToString(&buf);
if (safe_write(sockfd, buf.c_str(), buf.size()) == -1) {
if (safe_write(sockfd, &size, sizeof(size)) == -1
|| !msg.SerializeToString(&buf)
|| safe_write(sockfd, buf.c_str(), buf.size()) == -1) {
return false;
}
#else
char c = 0;
if (!msg.SerializeToFileDescriptor(sockfd) || safe_write(sockfd, &c, 1) == -1) {
if (!msg.SerializeToFileDescriptor(sockfd)
|| safe_write(sockfd, &c, 1) == -1) {
return false;
}
#endif
@ -41,8 +40,7 @@ bool SocketComm::rcvMsg(int sockfd, google::protobuf::Message& msg)
}
std::string st(buf, size);
delete [] buf;
msg.ParseFromString(st);
return true;
return msg.ParseFromString(st);
#else
return msg.ParseFromFileDescriptor(sockfd);
#endif
@ -77,10 +75,13 @@ ssize_t SocketComm::safe_read(int fd, void *buf, size_t count)
continue;
}
return -1;
} else if (ret == 0) {
// this deliberately deviates from read(2)
return -1;
}
count -= ret;
cbuf += ret;
} while (ret && count);
} while (count);
return cbuf - (const char *) buf;
}