[Spice-devel] [PATCH 2/2] channel: add option tcp keepalive timeout to channels
Christophe Fergeau
cfergeau at redhat.com
Tue Dec 8 09:52:08 PST 2015
On Tue, Dec 01, 2015 at 01:46:30PM +0900, Sunny Shin wrote:
> channel: add option tcp keepalive timeout to channels
>
> Signed-off-by: Sunny Shin <sunny4s.git at gmail.com>
> ---
> server/reds-private.h | 1 +
> server/reds.c | 23 +++++++++++++++++++++++
> server/spice-server.h | 1 +
> server/spice-server.syms | 1 +
> 4 files changed, 26 insertions(+)
>
> diff --git a/server/reds-private.h b/server/reds-private.h
> index 790f61c..4859542 100644
> --- a/server/reds-private.h
> +++ b/server/reds-private.h
> @@ -175,6 +175,7 @@ typedef struct RedsState {
> int vm_running;
> Ring char_devs_states; /* list of SpiceCharDeviceStateItem */
> int seamless_migration_enabled; /* command line arg */
> + int keepalive_timeout;
>
> SSL_CTX *ctx;
>
> diff --git a/server/reds.c b/server/reds.c
> index 8b3c3cb..692461f 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -2271,6 +2271,21 @@ static RedLinkInfo *reds_init_client_connection(int
> socket)
> }
> }
>
> + if (reds->keepalive_timeout > 0) {
> + int keepalive = 1;
> + if (setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, &keepalive,
> sizeof(keepalive)) == -1) {
> + if (errno != ENOTSUP) {
> + spice_printerr("setsockopt for keepalive failed, %s",
> strerror(errno));
> + }
> + }
> + if (setsockopt(socket, SOL_TCP, TCP_KEEPIDLE,
> + &reds->keepalive_timeout,
> sizeof(reds->keepalive_timeout)) == -1) {
> + if (errno != ENOTSUP) {
> + spice_printerr("setsockopt for keepalive timeout failed,
> %s", strerror(errno));
> + }
> + }
> + }
> +
> link = spice_new0(RedLinkInfo, 1);
> link->stream = reds_stream_new(socket);
>
> @@ -3944,3 +3959,11 @@ SPICE_GNUC_VISIBLE void
> spice_server_set_seamless_migration(SpiceServer *s, int
> reds->seamless_migration_enabled = enable &&
> !reds->allow_multiple_clients;
> spice_debug("seamless migration enabled=%d", enable);
> }
> +
> +SPICE_GNUC_VISIBLE void spice_server_set_keepalive_timeout(SpiceServer *s,
> int timeout)
> +{
> + spice_assert(s == reds);
> + reds->keepalive_timeout = timeout;
> + spice_debug("keepalive timeout=%d", timeout);
> +}
> +
> diff --git a/server/spice-server.h b/server/spice-server.h
> index c2ff61d..fa74136 100644
> --- a/server/spice-server.h
> +++ b/server/spice-server.h
> @@ -111,6 +111,7 @@ int spice_server_set_playback_compression(SpiceServer
> *s, int enable);
> int spice_server_set_agent_mouse(SpiceServer *s, int enable);
> int spice_server_set_agent_copypaste(SpiceServer *s, int enable);
> int spice_server_set_agent_file_xfer(SpiceServer *s, int enable);
> +void spice_server_set_keepalive_timeout(SpiceServer *s, int timeout);
>
> int spice_server_get_sock_info(SpiceServer *s, struct sockaddr *sa,
> socklen_t *salen);
> int spice_server_get_peer_info(SpiceServer *s, struct sockaddr *sa,
> socklen_t *salen);
> diff --git a/server/spice-server.syms b/server/spice-server.syms
> index d65e14d..92c26a9 100644
> --- a/server/spice-server.syms
> +++ b/server/spice-server.syms
> @@ -161,4 +161,5 @@ global:
> spice_replay_new;
> spice_replay_next_cmd;
> spice_replay_free_cmd;
> + spice_server_set_keepalive_timeout;
> } SPICE_SERVER_0.12.5;
This needs to go in a separate block:
SPICE_SERVER_0.12.7 {
global:
spice_server_set_keepalive_timeout;
} SPICE_SERVER_0.12.6;
I've fixed it locally. Apart from this, the patch looks good to me.
Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20151208/5530092c/attachment.sig>
More information about the Spice-devel
mailing list