It turns out that nc does not leave on server disconnect, and there doesn't seem to be any option to do that, leaving client open, and a bunch of idle processes. Replacing nc with socat solves that, client is disconnected when the VM is shut down, when the sever connection is closed. https://bugzilla.redhat.com/show_bug.cgi?id=1030487 --- src/virt-viewer-app.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c index b60ce2d..ded7e60 100644 --- a/src/virt-viewer-app.c +++ b/src/virt-viewer-app.c @@ -627,6 +627,7 @@ virt_viewer_app_open_tunnel_ssh(const char *sshhost, const char *cmd[10]; char portstr[50]; int n = 0; + GString *cat; cmd[n++] = "ssh"; if (sshport) { @@ -639,17 +640,30 @@ virt_viewer_app_open_tunnel_ssh(const char *sshhost, cmd[n++] = sshuser; } cmd[n++] = sshhost; - cmd[n++] = "nc"; - if (port) { - cmd[n++] = host; - cmd[n++] = port; - } else { - cmd[n++] = "-U"; - cmd[n++] = unixsock; - } + + cat = g_string_new("if (command -v socat) >/dev/null 2>&1"); + + g_string_append(cat, "; then socat - "); + if (port) + g_string_append_printf(cat, "TCP:%s:%s", host, port); + else + g_string_append_printf(cat, "UNIX-CONNECT:%s", unixsock); + + g_string_append(cat, "; else nc "); + if (port) + g_string_append_printf(cat, "%s %s", host, port); + else + g_string_append_printf(cat, "-U %s", unixsock); + + g_string_append(cat, "; fi"); + + cmd[n++] = cat->str; cmd[n++] = NULL; - return virt_viewer_app_open_tunnel(cmd); + n = virt_viewer_app_open_tunnel(cmd); + g_string_free(cat, TRUE); + + return n; } static int -- 1.9.3 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list