[Spice-devel] connect to xspice via a unix-socket
Frediano Ziglio
freddy77 at gmail.com
Mon Jul 18 08:40:27 UTC 2022
Il giorno lun 18 lug 2022 alle ore 09:06 Frediano Ziglio
<freddy77 at gmail.com> ha scritto:
>
> Il giorno lun 18 lug 2022 alle ore 08:56 bob cantor
> <bobc at confidesk.com> ha scritto:
> >
> > Is it possible to connect to xspice via a unix-socket rather than a tcp-port? (I would like to connect to xspice running in a LXC comtainer. The container and host are on the same machine, but there is no network connection between them).
> >
>
> Hi,
> currently only TCP is supported but the change should not be that difficult.
>
Hi,
something like this should do (not tested):
diff --git a/src/listen.c b/src/listen.c
index d00358d..292b20a 100644
--- a/src/listen.c
+++ b/src/listen.c
@@ -39,12 +39,15 @@
#include <arpa/inet.h>
#include <errno.h>
+#include <spice.h>
+
#include "listen.h"
#include "x11spice.h"
#define SPICE_URI_PREFIX "spice://"
+#define SPICE_UNIX_URI_PREFIX "spice+unix://"
-int listen_parse(const char *listen_spec, char **addr, int
*port_start, int *port_end)
+int listen_parse(const char *listen_spec, char **addr, int
*port_start, int *port_end, int *flags)
{
int leading = 0;
int trailing = 0;
@@ -54,6 +57,15 @@ int listen_parse(const char *listen_spec, char
**addr, int *port_start, int *por
*port_start = *port_end = -1;
*addr = NULL;
+ *flags = 0;
+
+ if (strncmp(listen_spec, SPICE_UNIX_URI_PREFIX,
strlen(SPICE_UNIX_URI_PREFIX)) == 0) {
+ listen_spec += strlen(SPICE_UNIX_URI_PREFIX);
+
+ *flags = SPICE_ADDR_FLAG_UNIX_ONLY;
+ *addr = strdup(listen_spec);
+ return 0;
+ }
/* Allow form of spice:// */
if (strlen(listen_spec) > strlen(SPICE_URI_PREFIX))
diff --git a/src/listen.h b/src/listen.h
index 78f8792..86d5594 100644
--- a/src/listen.h
+++ b/src/listen.h
@@ -25,7 +25,7 @@
/*----------------------------------------------------------------------------
** Prototypes
**--------------------------------------------------------------------------*/
-int listen_parse(const char *listen_spec, char **addr, int
*port_start, int *port_end);
+int listen_parse(const char *listen_spec, char **addr, int
*port_start, int *port_end, int *flags);
int listen_find_open_port(const char *addr, int start, int end, int *port);
#endif
diff --git a/src/spice.c b/src/spice.c
index 0c6c610..fe5be17 100644
--- a/src/spice.c
+++ b/src/spice.c
@@ -582,9 +582,10 @@ static int try_listen(spice_t *s, options_t *options)
char *addr = NULL;
int start;
int rc;
+ int flags;
- rc = listen_parse(options->listen, &addr, &start, &port);
+ rc = listen_parse(options->listen, &addr, &start, &port, &flags);
if (rc)
return rc;
@@ -599,7 +600,7 @@ static int try_listen(spice_t *s, options_t *options)
}
if (addr) {
- spice_server_set_addr(s->server, addr, 0);
+ spice_server_set_addr(s->server, addr, flags);
free(addr);
}
Frediano
More information about the Spice-devel
mailing list