detect remote hangup
This commit is contained in:
@@ -154,10 +154,10 @@ string fetchData(ebusd::TCPSocket* socket, bool listening, uint16_t timeout) {
|
|||||||
memset(fds, 0, sizeof(fds));
|
memset(fds, 0, sizeof(fds));
|
||||||
|
|
||||||
fds[0].fd = STDIN_FILENO;
|
fds[0].fd = STDIN_FILENO;
|
||||||
fds[0].events = POLLIN;
|
fds[0].events = POLLIN | POLLERR | POLLHUP | POLLRDHUP;
|
||||||
|
|
||||||
fds[1].fd = socket->getFD();
|
fds[1].fd = socket->getFD();
|
||||||
fds[1].events = POLLIN;
|
fds[1].events = POLLIN | POLLERR | POLLHUP | POLLRDHUP;
|
||||||
#else
|
#else
|
||||||
#ifdef HAVE_PSELECT
|
#ifdef HAVE_PSELECT
|
||||||
int maxfd;
|
int maxfd;
|
||||||
@@ -177,6 +177,10 @@ string fetchData(ebusd::TCPSocket* socket, bool listening, uint16_t timeout) {
|
|||||||
#ifdef HAVE_PPOLL
|
#ifdef HAVE_PPOLL
|
||||||
// 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 || (fds[0].revents & (POLLIN | POLLERR | POLLHUP | POLLRDHUP))
|
||||||
|
|| (fds[1].revents & (POLLERR | POLLHUP | POLLRDHUP))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#ifdef HAVE_PSELECT
|
#ifdef HAVE_PSELECT
|
||||||
// set readfds to inital checkfds
|
// set readfds to inital checkfds
|
||||||
|
|||||||
Reference in New Issue
Block a user