check error after reading

This commit is contained in:
John
2021-11-13 15:20:41 +01:00
parent 2f40129b99
commit 30c5a578c9
+19 -23
View File
@@ -180,6 +180,11 @@ string fetchData(ebusd::TCPSocket* socket, bool &listening, uint16_t timeout) {
listening = false; listening = false;
break; // remote hung up break; // remote hung up
} }
// check previous error
if (ret > 0 && ((fds[0].revents & POLLERR) || (fds[1].revents & POLLERR))) {
listening = false;
break;
}
// wait for new fd event // wait for new fd event
ret = ppoll(fds, nfds, &tdiff, nullptr); ret = ppoll(fds, nfds, &tdiff, nullptr);
if (ret < 0) { if (ret < 0) {
@@ -187,10 +192,6 @@ string fetchData(ebusd::TCPSocket* socket, bool &listening, uint16_t timeout) {
listening = false; listening = false;
break; break;
} }
if (ret > 0 && ((fds[0].revents & POLLERR) || (fds[1].revents & POLLERR))) {
listening = false;
break;
}
#else #else
#ifdef HAVE_PSELECT #ifdef HAVE_PSELECT
// set readfds to inital checkfds // set readfds to inital checkfds
@@ -221,28 +222,23 @@ string fetchData(ebusd::TCPSocket* socket, bool &listening, uint16_t timeout) {
} }
if (newData) { if (newData) {
if (socket->isValid()) { datalen = socket->recv(data, sizeof(data));
datalen = socket->recv(data, sizeof(data));
if (datalen < 0) { if (datalen < 0) {
perror("ebusctl recv"); perror("ebusctl recv");
break;
}
for (int i = 0; i < datalen; i++) {
ostream << data[i];
}
string str = ostream.str();
if (listening) {
return str;
}
if (str.length() >= 2 && str[str.length()-2] == '\n' && str[str.length()-1] == '\n') {
return str;
}
} else {
listening = false;
break; break;
} }
for (int i = 0; i < datalen; i++) {
ostream << data[i];
}
string str = ostream.str();
if (listening) {
return str;
}
if (str.length() >= 2 && str[str.length()-2] == '\n' && str[str.length()-1] == '\n') {
return str;
}
} else if (newInput) { } else if (newInput) {
getline(cin, message); getline(cin, message);
if (message.length() == 0) { if (message.length() == 0) {