From: "Daniel P. Berrange" <berra...@redhat.com> Remove the accept() call from __reds_accept_connection and rename it to reds_init_client_connection. The caller is now responsible for accepting the new socket. The method reds_init_client_connection merely initializes it for usage.
* server/reds.c: Add reds_init_client_connection Signed-off-by: Daniel P. Berrange <berra...@redhat.com> --- server/reds.c | 31 ++++++++++++++++++------------- 1 files changed, 18 insertions(+), 13 deletions(-) diff --git a/server/reds.c b/server/reds.c index e3dd7bf..e7c9512 100644 --- a/server/reds.c +++ b/server/reds.c @@ -2582,18 +2582,12 @@ static void reds_handle_ssl_accept(int fd, int event, void *data) reds_handle_new_link(link); } -static RedLinkInfo *__reds_accept_connection(int listen_socket) +static RedLinkInfo *reds_init_client_connection(int socket) { RedLinkInfo *link; RedsStream *stream; int delay_val = 1; int flags; - int socket; - - if ((socket = accept(listen_socket, NULL, 0)) == -1) { - red_printf("accept failed, %s", strerror(errno)); - return NULL; - } if ((flags = fcntl(socket, F_GETFL)) == -1) { red_printf("accept failed, %s", strerror(errno)); @@ -2626,8 +2620,6 @@ static RedLinkInfo *__reds_accept_connection(int listen_socket) return link; error: - close(socket); - return NULL; } @@ -2638,12 +2630,17 @@ static void reds_accept_ssl_connection(int fd, int event, void *data) int return_code; int ssl_error; BIO *sbio; + int socket; - link = __reds_accept_connection(reds->secure_listen_socket); - if (link == NULL) { + if ((socket = accept(reds->secure_listen_socket, NULL, 0)) == -1) { + red_printf("accept failed, %s", strerror(errno)); return; } + link = reds_init_client_connection(socket); + if (link == NULL) + goto error; + // Handle SSL handshaking if (!(sbio = BIO_new_socket(link->stream->socket, BIO_NOCLOSE))) { red_printf("could not allocate ssl bio socket"); @@ -2684,7 +2681,7 @@ static void reds_accept_ssl_connection(int fd, int event, void *data) SSL_free(link->stream->ssl); error: - close(link->stream->socket); + close(socket); free(link->stream); BN_free(link->tiTicketing.bn); free(link); @@ -2694,9 +2691,17 @@ static void reds_accept(int fd, int event, void *data) { RedLinkInfo *link; RedsStream *stream; + int socket; + + if ((socket = accept(reds->listen_socket, NULL, 0)) == -1) { + red_printf("accept failed, %s", strerror(errno)); + return; + } + - if (!(link = __reds_accept_connection(reds->listen_socket))) { + if (!(link = reds_init_client_connection(socket))) { red_printf("accept failed"); + close(socket); return; } -- 1.7.6.4 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel