[Spice-devel] [spice-server v3 4/6] net: Introduce red_socket_set_keepalive() helper
Frediano Ziglio
fziglio at redhat.com
Thu Mar 30 17:37:01 UTC 2017
>
> This allows to move some low-level code out of reds.c
>
> Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
> ---
> server/net-utils.c | 32 ++++++++++++++++++++++++++++++++
> server/net-utils.h | 1 +
> server/reds.c | 25 +------------------------
> 3 files changed, 34 insertions(+), 24 deletions(-)
>
> diff --git a/server/net-utils.c b/server/net-utils.c
> index 0e533f5..44e1987 100644
> --- a/server/net-utils.c
> +++ b/server/net-utils.c
> @@ -32,6 +32,38 @@
> #include "net-utils.h"
>
> /**
> + * red_socket_set_keepalive:
> + * @fd: a socket file descriptor
> + * @keepalive: whether to enable keepalives on @fd
> + *
> + * Returns: #true if the operation succeeded, #false otherwise.
> + */
> +bool red_socket_set_keepalive(int fd, bool enable, int timeout)
> +{
> + int keepalive = !!enable;
> +
> + if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive,
> sizeof(keepalive)) == -1) {
> + if (errno != ENOTSUP) {
> + spice_printerr("setsockopt for keepalive failed, %s",
> strerror(errno));
> + return false;
> + }
> + }
> +
> + if (!enable) {
> + return true;
> + }
> +
> + if (setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, &timeout, sizeof(timeout)) ==
> -1) {
> + if (errno != ENOTSUP) {
> + spice_printerr("setsockopt for keepalive timeout failed, %s",
> strerror(errno));
> + return false;
> + }
> + }
> +
> + return true;
> +}
> +
> +/**
> * red_socket_set_no_delay:
> * @fd: a socket file descriptor
> * @no_delay: whether to enable TCP_NODELAY on @fd
> diff --git a/server/net-utils.h b/server/net-utils.h
> index 023bc6b..d56b479 100644
> --- a/server/net-utils.h
> +++ b/server/net-utils.h
> @@ -20,6 +20,7 @@
>
> #include <stdbool.h>
>
> +bool red_socket_set_keepalive(int fd, bool enable, int timeout);
> bool red_socket_set_no_delay(int fd, bool no_delay);
> bool red_socket_set_non_blocking(int fd, bool non_blocking);
>
> diff --git a/server/reds.c b/server/reds.c
> index 2f2dad8..d741a10 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -2378,29 +2378,6 @@ static void reds_handle_ssl_accept(int fd, int event,
> void *data)
>
> #define KEEPALIVE_TIMEOUT (10*60)
>
> -static bool reds_init_keepalive(int socket)
> -{
> - int keepalive = 1;
> - int keepalive_timeout = KEEPALIVE_TIMEOUT;
> -
> - if (setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, &keepalive,
> sizeof(keepalive)) == -1) {
> - if (errno != ENOTSUP) {
> - spice_printerr("setsockopt for keepalive failed, %s",
> strerror(errno));
> - return false;
> - }
> - }
> -
> - if (setsockopt(socket, SOL_TCP, TCP_KEEPIDLE,
> - &keepalive_timeout, sizeof(keepalive_timeout)) == -1) {
> - if (errno != ENOTSUP) {
> - spice_printerr("setsockopt for keepalive timeout failed, %s",
> strerror(errno));
> - return false;
> - }
> - }
> -
> - return true;
> -}
> -
> static RedLinkInfo *reds_init_client_connection(RedsState *reds, int socket)
> {
> RedLinkInfo *link;
> @@ -2413,7 +2390,7 @@ static RedLinkInfo
> *reds_init_client_connection(RedsState *reds, int socket)
> goto error;
> }
>
> - reds_init_keepalive(socket);
> + red_socket_set_keepalive(socket, TRUE, KEEPALIVE_TIMEOUT);
>
> link = spice_new0(RedLinkInfo, 1);
> link->reds = reds;
Acked-by: Frediano Ziglio <fziglio at redhat.com>
Frediano
More information about the Spice-devel
mailing list