From 492814132a214688dbb3c7e088673bdd78cbfb08 Mon Sep 17 00:00:00 2001 From: "Hui, Chunyang" Date: Fri, 17 Mar 2023 11:33:11 +0800 Subject: [PATCH] Fix potential server test failure Due to scheduling, the client could attempt to connect to the server before the server starts to accept. Make the client retry multiple times before returning with error. --- test/client/main.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/test/client/main.c b/test/client/main.c index dbf34cd9..cb3f4106 100644 --- a/test/client/main.c +++ b/test/client/main.c @@ -38,12 +38,29 @@ int connect_with_server(const char *addr_string, const char *port_string) { THROW_ERROR("inet_pton error"); } - ret = connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); - if (ret < 0) { - close(sockfd); - THROW_ERROR("connect error"); + int retry_num = 5; + while (retry_num > 0) { + ret = connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); + if (ret == 0) { + break; + } + if (ret < 0 && errno == ECONNREFUSED) { + // The server maynot be ready to accept. Try again later. + sleep(1); + retry_num--; + continue; + } else { + close(sockfd); + THROW_ERROR("connect error"); + } } + if (retry_num == 0) { + close(sockfd); + THROW_ERROR("Retry connect multiple times. All failure"); + } + + printf("connected with server"); return sockfd; }