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:
@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user