summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNahum Shalman <nshalman@elys.com>2012-03-12 12:33:20 +0100
committerHans de Goede <hdegoede@redhat.com>2012-03-12 12:33:20 +0100
commit198ffb92d482fd01af8a774788afa3931721b714 (patch)
tree272664fa822be7290afe149cb2382ca588cdf15d
parent20c7323c9efb22c1aae37557814f21cf58c2a322 (diff)
server: listen on a pre-opened file descriptor
Allow applications to pre-open a file descriptor and have spice listen on it. Thanks to Daniel Berrange for his comments
-rw-r--r--server/reds.c21
-rw-r--r--server/spice-server.syms1
-rw-r--r--server/spice.h1
3 files changed, 23 insertions, 0 deletions
diff --git a/server/reds.c b/server/reds.c
index 5fc03ea2..dc009f4b 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_listen_socket_fd = -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_listen_socket_fd != -1 ) {
+ reds->listen_socket = spice_listen_socket_fd;
+ 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_listen_socket_fd(SpiceServer *s, int listen_fd)
+{
+ ASSERT(reds == s);
+ spice_listen_socket_fd = listen_fd;
+ 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 272548ed..4b842a33 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_listen_socket_fd;
} SPICE_SERVER_0.10.1;
diff --git a/server/spice.h b/server/spice.h
index 151b3db0..8dd1c3df 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_listen_socket_fd(SpiceServer *s, int listen_fd);
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);