fix for datasocket and clientsocket, to be reviewed.

clientsocket: to print origin of error (rx/det) for tcp socket failure
datasocket: usleep only for send for rhel7, not for fedora.. when fpath /, fwrite 1, rx_start fails without sending exception
This commit is contained in:
maliakal_d 2020-07-14 13:04:24 +02:00
parent 293fda0c7a
commit c67b7aab4d
3 changed files with 20 additions and 18 deletions

View File

@ -638,7 +638,7 @@ int get_server_version(int file_des) {
int64_t retval = -1; int64_t retval = -1;
retval = getServerVersion(); retval = getServerVersion();
LOG(logDEBUG1, LOG(logDEBUG1,
("firmware version retval: 0x%llx\n", (long long int)retval)); ("server version retval: 0x%llx\n", (long long int)retval));
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }
@ -648,7 +648,7 @@ int get_serial_number(int file_des) {
int64_t retval = -1; int64_t retval = -1;
retval = getDetectorNumber(); retval = getDetectorNumber();
LOG(logDEBUG1, LOG(logDEBUG1,
("firmware version retval: 0x%llx\n", (long long int)retval)); ("detector number retval: 0x%llx\n", (long long int)retval));
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }

View File

@ -72,6 +72,22 @@ void ClientSocket::readReply(int &ret, void *retval, size_t retval_size) {
try { try {
Receive(&ret, sizeof(ret)); Receive(&ret, sizeof(ret));
if (ret == slsDetectorDefs::FAIL) {
char mess[MAX_STR_LENGTH]{};
// get error message
Receive(mess, sizeof(mess));
// Do we need to know hostname here?
// In that case save it???
if (socketType == "Receiver") {
throw ReceiverError("Receiver returned: " + std::string(mess));
} else if (socketType == "Detector") {
throw DetectorError("Detector returned: " + std::string(mess));
} else {
throw GuiError(mess);
}
}
// get retval
Receive(retval, retval_size);
} }
// debugging // debugging
catch (sls::SocketError &e) { catch (sls::SocketError &e) {
@ -83,22 +99,6 @@ void ClientSocket::readReply(int &ret, void *retval, size_t retval_size) {
throw GuiError(e.what()); throw GuiError(e.what());
} }
} }
if (ret == slsDetectorDefs::FAIL) {
char mess[MAX_STR_LENGTH]{};
// get error message
Receive(mess, sizeof(mess));
// Do we need to know hostname here?
// In that case save it???
if (socketType == "Receiver") {
throw ReceiverError("Receiver returned: " + std::string(mess));
} else if (socketType == "Detector") {
throw DetectorError("Detector returned: " + std::string(mess));
} else {
throw GuiError(mess);
}
}
// get retval
Receive(retval, retval_size);
} }
}; // namespace sls }; // namespace sls

View File

@ -68,6 +68,8 @@ int DataSocket::Send(const void *buffer, size_t size) {
int data_size = static_cast<int>(size); // signed size int data_size = static_cast<int>(size); // signed size
while (bytes_sent < (data_size)) { while (bytes_sent < (data_size)) {
auto this_send = ::write(getSocketId(), buffer, size); auto this_send = ::write(getSocketId(), buffer, size);
usleep(0); // TODO: fix for rhel7 (not fedora) sending 0 chars for mess
// (rx_start with fwrite 1 and fpath /)
if (this_send <= 0) if (this_send <= 0)
break; break;
bytes_sent += this_send; bytes_sent += this_send;