This allows to move some low-level code out of reds.c Signed-off-by: Christophe Fergeau <cfergeau@xxxxxxxxxx> --- server/net-utils.c | 30 ++++++++++++++++++++++++++++++ server/net-utils.h | 1 + server/reds.c | 13 ++----------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/server/net-utils.c b/server/net-utils.c index 10f447b..b017daa 100644 --- a/server/net-utils.c +++ b/server/net-utils.c @@ -52,3 +52,33 @@ bool red_socket_set_no_delay(int fd, bool no_delay) return true; } + +/** + * red_socket_set_non_blocking: + * @fd: a socket file descriptor + * @non_blocking: whether to enable O_NONBLOCK on @fd + * + * Returns: #true if the operation succeeded, #false otherwise. + */ +bool red_socket_set_non_blocking(int fd, bool non_blocking) +{ + int flags; + + if ((flags = fcntl(fd, F_GETFL)) == -1) { + spice_warning("fnctl(F_GETFL) failed, %s", strerror(errno)); + return false; + } + + if (non_blocking) { + flags |= O_NONBLOCK; + } else { + flags &= ~O_NONBLOCK; + } + + if (fcntl(fd, F_SETFL, flags) == -1) { + spice_warning("fnctl(F_SETFL) failed, %s", strerror(errno)); + return false; + } + + return true; +} diff --git a/server/net-utils.h b/server/net-utils.h index 9f4932e..023bc6b 100644 --- a/server/net-utils.h +++ b/server/net-utils.h @@ -21,5 +21,6 @@ #include <stdbool.h> bool red_socket_set_no_delay(int fd, bool no_delay); +bool red_socket_set_non_blocking(int fd, bool non_blocking); #endif diff --git a/server/reds.c b/server/reds.c index 653a045..2f2dad8 100644 --- a/server/reds.c +++ b/server/reds.c @@ -31,8 +31,6 @@ #include <limits.h> #include <pthread.h> #include <sys/mman.h> -#include <fcntl.h> -#include <errno.h> #include <ctype.h> #include <openssl/err.h> @@ -2406,16 +2404,9 @@ static bool reds_init_keepalive(int socket) static RedLinkInfo *reds_init_client_connection(RedsState *reds, int socket) { RedLinkInfo *link; - int flags; - if ((flags = fcntl(socket, F_GETFL)) == -1) { - spice_warning("accept failed, %s", strerror(errno)); - goto error; - } - - if (fcntl(socket, F_SETFL, flags | O_NONBLOCK) == -1) { - spice_warning("accept failed, %s", strerror(errno)); - goto error; + if (!red_socket_set_non_blocking(socket, TRUE)) { + goto error; } if (!red_socket_set_no_delay(socket, TRUE)) { -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel