stop on error conditions
This commit is contained in:
+19
-5
@@ -132,7 +132,7 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
string fetchData(ebusd::TCPSocket* socket, bool listening, uint16_t timeout) {
|
string fetchData(ebusd::TCPSocket* socket, bool &listening, uint16_t timeout) {
|
||||||
char data[1024];
|
char data[1024];
|
||||||
ssize_t datalen;
|
ssize_t datalen;
|
||||||
ostringstream ostream;
|
ostringstream ostream;
|
||||||
@@ -177,11 +177,18 @@ string fetchData(ebusd::TCPSocket* socket, bool listening, uint16_t timeout) {
|
|||||||
#ifdef HAVE_PPOLL
|
#ifdef HAVE_PPOLL
|
||||||
// check previous hangup
|
// check previous hangup
|
||||||
if (ret > 0 && ((fds[0].revents & (POLLHUP | POLLRDHUP)) || (fds[1].revents & (POLLHUP | POLLRDHUP)))) {
|
if (ret > 0 && ((fds[0].revents & (POLLHUP | POLLRDHUP)) || (fds[1].revents & (POLLHUP | POLLRDHUP)))) {
|
||||||
|
listening = false;
|
||||||
break; // remote hung up
|
break; // remote hung up
|
||||||
}
|
}
|
||||||
// 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 || (ret > 0 && ((fds[0].revents & POLLERR) || (fds[1].revents & POLLERR)))) {
|
if (ret < 0) {
|
||||||
|
perror("ebusctl poll");
|
||||||
|
listening = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ret > 0 && ((fds[0].revents & POLLERR) || (fds[1].revents & POLLERR))) {
|
||||||
|
listening = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -218,7 +225,7 @@ string fetchData(ebusd::TCPSocket* socket, bool listening, uint16_t timeout) {
|
|||||||
datalen = socket->recv(data, sizeof(data));
|
datalen = socket->recv(data, sizeof(data));
|
||||||
|
|
||||||
if (datalen < 0) {
|
if (datalen < 0) {
|
||||||
perror("recv");
|
perror("ebusctl recv");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,6 +240,7 @@ string fetchData(ebusd::TCPSocket* socket, bool listening, uint16_t timeout) {
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
listening = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (newInput) {
|
} else if (newInput) {
|
||||||
@@ -241,7 +249,11 @@ string fetchData(ebusd::TCPSocket* socket, bool listening, uint16_t timeout) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
sendmessage = message+'\n';
|
sendmessage = message+'\n';
|
||||||
socket->send(sendmessage.c_str(), sendmessage.size());
|
if (socket->send(sendmessage.c_str(), sendmessage.size()) < 0) {
|
||||||
|
perror("ebusctl send in fetch");
|
||||||
|
listening = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcasecmp(message.c_str(), "Q") == 0
|
if (strcasecmp(message.c_str(), "Q") == 0
|
||||||
|| strcasecmp(message.c_str(), "QUIT") == 0
|
|| strcasecmp(message.c_str(), "QUIT") == 0
|
||||||
@@ -288,7 +300,9 @@ bool connect(const char* host, uint16_t port, uint16_t timeout, char* const *arg
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendmessage = message+'\n';
|
sendmessage = message+'\n';
|
||||||
socket->send(sendmessage.c_str(), sendmessage.size());
|
if (socket->send(sendmessage.c_str(), sendmessage.size()) < 0) {
|
||||||
|
perror("ebusctl send");
|
||||||
|
}
|
||||||
|
|
||||||
if (strcasecmp(message.c_str(), "Q") == 0
|
if (strcasecmp(message.c_str(), "Q") == 0
|
||||||
|| strcasecmp(message.c_str(), "QUIT") == 0
|
|| strcasecmp(message.c_str(), "QUIT") == 0
|
||||||
|
|||||||
Reference in New Issue
Block a user