@@ -392,7 +392,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, long ux_sock,
/* see if a client wants to speak to us */
for (i = POLLFDS_BASE; i < n_pfds; i++) {
- if (polls[i].revents & POLLIN) {
+ if (polls[i].revents & (POLLIN|POLLHUP|POLLERR)) {
struct timespec start_time;
c = NULL;
@@ -409,6 +409,12 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, long ux_sock,
i, polls[i].fd);
continue;
}
+ if (polls[i].revents & (POLLHUP|POLLERR)) {
+ condlog(4, "cli[%d]: Disconnected",
+ c->fd);
+ dead_client(c);
+ continue;
+ }
get_monotonic_time(&start_time);
if (recv_packet_from_client(c->fd, &inbuf,
uxsock_timeout)
@@ -422,7 +428,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, long ux_sock,
continue;
}
condlog(4, "cli[%d]: Got request [%s]",
- i, inbuf);
+ polls[i].fd, inbuf);
uxsock_trigger(inbuf, &reply, &rlen,
_socket_client_is_root(c->fd),
trigger_data);
@@ -433,7 +439,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, long ux_sock,
} else {
condlog(4, "cli[%d]: "
"Reply [%d bytes]",
- i, rlen);
+ polls[i].fd, rlen);
}
free(reply);
reply = NULL;