diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2024-07-26 17:20:27 +1000 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-07-26 13:51:23 +0200 |
commit | a06db27c4997a9cb8549f1f43b332692496ac66a (patch) | |
tree | bfdc37c71a20f34f22b7d90031ba010a1c80cfbe | |
parent | 77c092ee5ede9a2642978b9874b3c17e88829fbf (diff) | |
download | passt-a06db27c4997a9cb8549f1f43b332692496ac66a.tar passt-a06db27c4997a9cb8549f1f43b332692496ac66a.tar.gz passt-a06db27c4997a9cb8549f1f43b332692496ac66a.tar.bz2 passt-a06db27c4997a9cb8549f1f43b332692496ac66a.tar.lz passt-a06db27c4997a9cb8549f1f43b332692496ac66a.tar.xz passt-a06db27c4997a9cb8549f1f43b332692496ac66a.tar.zst passt-a06db27c4997a9cb8549f1f43b332692496ac66a.zip |
tap: Better report errors receiving from QEMU socket
If we get an error on recv() from the QEMU socket, we currently don't
print any kind of error. Although this can happen in a non-fatal situation
such as a guest restarting, it's unusual enough that we realy should report
something for debugability.
Add an error message in this case. Also always report when the qemu
connection closes for any reason, not just when it will cause us to exit
(--one-off).
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
[sbrivio: Change error message: it's not necessarily QEMU, and mention
that we are resetting the connection]
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r-- | tap.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -969,10 +969,10 @@ void tap_add_packet(struct ctx *c, ssize_t l2len, char *p) */ static void tap_sock_reset(struct ctx *c) { - if (c->one_off) { - info("Client closed connection, exiting"); + info("Client connection closed%s", c->one_off ? ", exiting" : ""); + + if (c->one_off) exit(EXIT_SUCCESS); - } /* Close the connected socket, wait for a new connection */ epoll_ctl(c->epollfd, EPOLL_CTL_DEL, c->fd_tap, NULL); @@ -1005,8 +1005,10 @@ redo: n = recv(c->fd_tap, p, TAP_BUF_FILL, MSG_DONTWAIT); if (n < 0) { - if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) + if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) { + err_perror("Receive error on guest connection, reset"); tap_sock_reset(c); + } return; } |