We leave all the hard work of setting up the socket to qemu.
This will cause all of the TCP setsockopt calls to return ENOSUP
but that is okay.
---
 server/reds.c            |   21 +++++++++++++++++++++
 server/spice-server.syms |    1 +
 server/spice.h           |    1 +
 3 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/server/reds.c b/server/reds.c
index 5fc03ea..7f9ffcc 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -94,6 +94,7 @@ static SpiceMigrateInstance *migration_interface = NULL;
 
 static int spice_port = -1;
 static int spice_secure_port = -1;
+static int spice_unix_socket = -1;
 static char spice_addr[256];
 static int spice_family = PF_UNSPEC;
 static char *default_renderer = "sw";
@@ -2995,6 +2996,19 @@ static int reds_init_net(void)
             red_error("set fd handle failed");
         }
     }
+
+    if (spice_unix_socket != -1 ) {
+        reds->listen_socket = spice_unix_socket;
+        if (-1 == reds->listen_socket) {
+            return -1;
+        }
+        reds->listen_watch = core->watch_add(reds->listen_socket,
+                                             SPICE_WATCH_EVENT_READ,
+                                             reds_accept, NULL);
+        if (reds->listen_watch == NULL) {
+            red_error("set fd handle failed");
+        }
+    }
     return 0;
 }
 
@@ -3787,6 +3801,13 @@ SPICE_GNUC_VISIBLE void 
spice_server_set_addr(SpiceServer *s, const char *addr,
     }
 }
 
+SPICE_GNUC_VISIBLE int spice_server_set_unix_socket(SpiceServer *s, int 
unix_socket)
+{
+    ASSERT(reds == s);
+    spice_unix_socket = unix_socket;
+    return 0;
+}
+
 SPICE_GNUC_VISIBLE int spice_server_set_noauth(SpiceServer *s)
 {
     ASSERT(reds == s);
diff --git a/server/spice-server.syms b/server/spice-server.syms
index 272548e..51c6ffa 100644
--- a/server/spice-server.syms
+++ b/server/spice-server.syms
@@ -106,4 +106,5 @@ SPICE_SERVER_0.10.2 {
 global:
     spice_server_set_name;
     spice_server_set_uuid;
+    spice_server_set_unix_socket;
 } SPICE_SERVER_0.10.1;
diff --git a/server/spice.h b/server/spice.h
index 151b3db..7ace03b 100644
--- a/server/spice.h
+++ b/server/spice.h
@@ -421,6 +421,7 @@ int spice_server_set_compat_version(SpiceServer *s,
                                     spice_compat_version_t version);
 int spice_server_set_port(SpiceServer *s, int port);
 void spice_server_set_addr(SpiceServer *s, const char *addr, int flags);
+int spice_server_set_unix_socket(SpiceServer *s, int unix_socket);
 int spice_server_set_noauth(SpiceServer *s);
 int spice_server_set_sasl(SpiceServer *s, int enabled);
 int spice_server_set_sasl_appname(SpiceServer *s, const char *appname);
-- 
1.7.7.6

_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to