aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2024-07-26 17:20:27 +1000
committerStefano Brivio <sbrivio@redhat.com>2024-07-26 13:51:23 +0200
commita06db27c4997a9cb8549f1f43b332692496ac66a (patch)
treebfdc37c71a20f34f22b7d90031ba010a1c80cfbe
parent77c092ee5ede9a2642978b9874b3c17e88829fbf (diff)
downloadpasst-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.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/tap.c b/tap.c
index 44bd444..ff2b668 100644
--- a/tap.c
+++ b/tap.c
@@ -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;
}