diff options
Diffstat (limited to 'qga/channel-posix.c')
-rw-r--r-- | qga/channel-posix.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/qga/channel-posix.c b/qga/channel-posix.c index 579891d940..71582e0c38 100644 --- a/qga/channel-posix.c +++ b/qga/channel-posix.c @@ -193,6 +193,31 @@ static gboolean ga_channel_open(GAChannel *c, const gchar *path, GAChannelMethod ga_channel_listen_add(c, fd, true); break; } + case GA_CHANNEL_VSOCK_LISTEN: { + Error *local_err = NULL; + SocketAddress *addr; + char *addr_str; + int fd; + + addr_str = g_strdup_printf("vsock:%s", path); + addr = socket_parse(addr_str, &local_err); + g_free(addr_str); + if (local_err != NULL) { + g_critical("%s", error_get_pretty(local_err)); + error_free(local_err); + return false; + } + + fd = socket_listen(addr, &local_err); + qapi_free_SocketAddress(addr); + if (local_err != NULL) { + g_critical("%s", error_get_pretty(local_err)); + error_free(local_err); + return false; + } + ga_channel_listen_add(c, fd, true); + break; + } default: g_critical("error binding/listening to specified socket"); return false; |