kvm tools: Handle only relevant events in epoll

Handle only new incoming data for listener and stop fds, treat all other
events as error events which close the socket.

This fixes the bug where a 'kvm list' could have hanged because a close
event in the listener fd have been treated as a new connection.

Cc: Osier Yang <jyang@redhat.com>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
diff --git a/kvm-ipc.c b/kvm-ipc.c
index 3131fe8..40ab457 100644
--- a/kvm-ipc.c
+++ b/kvm-ipc.c
@@ -112,7 +112,7 @@
 		if (nfds > 0) {
 			int fd = event.data.fd;
 
-			if (fd == stop_fd) {
+			if (fd == stop_fd && event.events & EPOLLIN) {
 				break;
 			} else if (fd == server_fd) {
 				int client;
@@ -138,13 +138,13 @@
 
 	epoll_fd = epoll_create(KVM_IPC_MAX_MSGS);
 
-	ev.events = EPOLLIN | EPOLLOUT | EPOLLPRI;
+	ev.events = EPOLLIN | EPOLLET;
 	ev.data.fd = sock;
 	if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock, &ev) < 0)
 		die("Failed starting IPC thread");
 
 	stop_fd = eventfd(0, 0);
-	ev.events = EPOLLIN | EPOLLOUT | EPOLLRDHUP | EPOLLET;
+	ev.events = EPOLLIN | EPOLLET;
 	ev.data.fd = stop_fd;
 	if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, stop_fd, &ev) < 0)
 		die("Failed adding stop event to epoll");