We call tap_sock_unix_new() to handle a new connection to the qemu socket if we get an EPOLLIN event on c->fd_tap_listen. If we get an error event on c->fd_tap_listen instead, we'll fall through to the "tap reset" path. However, this won't do anything useful for an error on the listening socket, it will just close the already connected socket. If we wanted to handle errors on this socket, we'd need to do something different than for an error on the connected socket. So, change the logic to explicitly do nothing for any !EPOLLIN events on the listening socket. Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au> --- tap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tap.c b/tap.c index 3a43263..a8e5ce6 100644 --- a/tap.c +++ b/tap.c @@ -1281,8 +1281,9 @@ static void tap_sock_reset(struct ctx *c) void tap_handler(struct ctx *c, int fd, uint32_t events, const struct timespec *now) { - if (fd == c->fd_tap_listen && events == EPOLLIN) { - tap_sock_unix_new(c); + if (fd == c->fd_tap_listen) { + if (events == EPOLLIN) + tap_sock_unix_new(c); return; } -- 2.41.0