fixed reading and double print in client

This commit is contained in:
Erik Frojdh 2019-06-05 15:40:28 +02:00
parent 8cf94537c8
commit b5e4d7d8fb
3 changed files with 7 additions and 7 deletions

View File

@ -75,15 +75,12 @@ void ClientSocket::readReply(int &ret, void *retval, size_t retval_size) {
char mess[MAX_STR_LENGTH]{}; char mess[MAX_STR_LENGTH]{};
// get error message // get error message
read(mess, sizeof(mess)); read(mess, sizeof(mess));
FILE_LOG(logERROR) << socketType << " returned error: " << mess;
std::cout << "\n"; // needed to reset the color.
// Do we need to know hostname here? // Do we need to know hostname here?
// In that case save it??? // In that case save it???
if (socketType == "Receiver") { if (socketType == "Receiver") {
throw ReceiverError(mess); throw ReceiverError("Receiver returned: " + std::string(mess));
} else if (socketType == "Detector") { } else if (socketType == "Detector") {
throw DetectorError(mess); throw DetectorError("Detector returned: " + std::string(mess));
} else { } else {
throw GuiError(mess); throw GuiError(mess);
} }

View File

@ -43,9 +43,12 @@ DataSocket &DataSocket::operator=(DataSocket &&move) noexcept {
int DataSocket::receiveData(void *buffer, size_t size) { int DataSocket::receiveData(void *buffer, size_t size) {
size_t dataRead = 0; size_t dataRead = 0;
while (dataRead < size) { while (dataRead < size) {
dataRead += auto thisRead =
::read(getSocketId(), reinterpret_cast<char *>(buffer) + dataRead, ::read(getSocketId(), reinterpret_cast<char *>(buffer) + dataRead,
size - dataRead); size - dataRead);
if (thisRead <= 0)
break;
dataRead += thisRead;
} }
return dataRead; return dataRead;
} }

View File

@ -23,7 +23,7 @@ int ServerInterface2::sendResult(int ret, void *retval, int retvalSize,
int ServerInterface2::receiveArg(void *arg, int sizeofArg) { int ServerInterface2::receiveArg(void *arg, int sizeofArg) {
assert(sizeofArg > 0); assert(sizeofArg > 0);
int bytes_read = read(arg, sizeofArg); int bytes_read = receiveData(arg, sizeofArg);
if (bytes_read == sizeofArg) { if (bytes_read == sizeofArg) {
return defs::OK; return defs::OK;
} else { } else {