[Spice-devel] [PATCH 2/2] server: listen on a pre-opened file descriptor

David Mansfield spice at dm.cobite.com
Fri Mar 9 13:01:02 PST 2012



On 03/09/2012 12:26 PM, Nahum Shalman wrote:
> Allow applications to pre-open a file descriptor and have spice listen
> on it.
>
> Thanks to Daniel Berrange for his comments
> ---
>   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..dc009f4 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;
> +        }
As a lurker, just wondering how the second if (above) could be necessary 
given the first if.


> +        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 272548e..4b842a3 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 151b3db..8dd1c3d 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);


More information about the Spice-devel mailing list