[Spice-devel] [PATCH 2/2] server: support listening on a UNIX socket

Nahum Shalman nshalman at elys.com
Fri Mar 9 07:39:22 PST 2012


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



More information about the Spice-devel mailing list