check error after reading
This commit is contained in:
+19
-23
@@ -180,6 +180,11 @@ string fetchData(ebusd::TCPSocket* socket, bool &listening, uint16_t timeout) {
|
||||
listening = false;
|
||||
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
|
||||
ret = ppoll(fds, nfds, &tdiff, nullptr);
|
||||
if (ret < 0) {
|
||||
@@ -187,10 +192,6 @@ string fetchData(ebusd::TCPSocket* socket, bool &listening, uint16_t timeout) {
|
||||
listening = false;
|
||||
break;
|
||||
}
|
||||
if (ret > 0 && ((fds[0].revents & POLLERR) || (fds[1].revents & POLLERR))) {
|
||||
listening = false;
|
||||
break;
|
||||
}
|
||||
#else
|
||||
#ifdef HAVE_PSELECT
|
||||
// set readfds to inital checkfds
|
||||
@@ -221,28 +222,23 @@ string fetchData(ebusd::TCPSocket* socket, bool &listening, uint16_t timeout) {
|
||||
}
|
||||
|
||||
if (newData) {
|
||||
if (socket->isValid()) {
|
||||
datalen = socket->recv(data, sizeof(data));
|
||||
datalen = socket->recv(data, sizeof(data));
|
||||
|
||||
if (datalen < 0) {
|
||||
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;
|
||||
if (datalen < 0) {
|
||||
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 if (newInput) {
|
||||
getline(cin, message);
|
||||
if (message.length() == 0) {
|
||||
|
||||
Reference in New Issue
Block a user