audioservice: Resolving bugs related to application to audioservice [3/3]

PD#SWPL-141707

Problem:
1.thread does not exit properly.
2.functions with the same name as in avs do not work properly.
3.missing client connection success action.

Solution:
1.add pthread_cancel to control.
2.change the function names.
3.add callback function for successful client connection.
4.add client-side and server-side naming to make logs distinguishable.

Verify:
a5

Change-Id: I60aa0e2f08b12cd6baf7e1210d4f9b428a186149
Signed-off-by: yifan.li <yifan.li@amlogic.com>
diff --git a/aml_socketipc_v2/client/TestClient.c b/aml_socketipc_v2/client/TestClient.c
index 742ec49..cb8c5ce 100644
--- a/aml_socketipc_v2/client/TestClient.c
+++ b/aml_socketipc_v2/client/TestClient.c
@@ -92,6 +92,7 @@
 
 // 1.callback function
 void handleServerMsgAction(char* buf);
+void clientConnectedHandler(void);
 
 // 2.business action functions for sending to server
 void sendClientMsgType1(int msgTypeValue);
@@ -123,6 +124,13 @@
         msgCbks[msg->type](msg);
     }
 }
+void clientConnectedHandler() {
+    printf("client connect succeeded \n");
+}
+
+void clientDisconnectedHandler() {
+    printf("client disconnect \n");
+}
 
 void serverMsgType1ActHandle(ServerMsgT* msg)
 {
@@ -184,10 +192,13 @@
 
     clientInputData->connectIp = connectIp;
     clientInputData->connectPort = connectPort;
+    clientInputData->clientName = "testClient";
 
     clientInputData->registerBitmap = bitmap;
 
     clientInputData->clientHandler = handleServerMsgAction;
+    clientInputData->clientConnectedHandler = clientConnectedHandler;
+    clientInputData->clientDisconnectedHandler = clientDisconnectedHandler;
 }
 
 int main(int argc, char *argv[])
diff --git a/aml_socketipc_v2/common/socket_client.c b/aml_socketipc_v2/common/socket_client.c
index 990a4cf..6e86b62 100644
--- a/aml_socketipc_v2/common/socket_client.c
+++ b/aml_socketipc_v2/common/socket_client.c
@@ -40,9 +40,220 @@
 
 ClientSocketData clientSocketData;
 
+static void clientInitConnection()
+{
+    struct sockaddr_in serv_addr;
+
+    clientSocketData.sockfd = socket(AF_INET, SOCK_STREAM, 0);
+    if (clientSocketData.sockfd < 0) {
+        AML_LOGE("client %s: create socket failed\n", clientSocketData.clientName);
+        exit(-1);
+    }
+    memset(&serv_addr, 0, sizeof(serv_addr));
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_port = htons(clientSocketData.connectPort);
+    if (inet_pton(AF_INET, clientSocketData.connectIp, &serv_addr.sin_addr) != 1) {
+        AML_LOGE("client %s: invalid address\n", clientSocketData.clientName);
+        exit(-1);
+    }
+
+    int ret;
+    int reconnectionCount = 0;
+
+    while (true) {
+        ret = connect(clientSocketData.sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
+        if (ret == 0) {
+            break;
+        }
+        switch (errno) {
+        case EISCONN:
+            AML_LOGW("client %s: Socket is already connected. Closing and retrying.\n", clientSocketData.clientName);
+            close(clientSocketData.sockfd);
+            clientSocketData.sockfd = socket(AF_INET, SOCK_STREAM, 0);  // creat new socket
+            if (clientSocketData.sockfd == -1) {
+                AML_LOGE("Error creating socket");
+                exit(EXIT_FAILURE);
+            }
+            break;
+        default:
+            if (reconnectionCount > 1 && ((reconnectionCount + 1) % 10 == 0)) {
+                reconnectionCount = 0;
+                AML_LOGW("client %s: try to connect to server, ret=%d, errno=%d \n", clientSocketData.clientName, ret, errno);
+            }
+        }
+        sleep(1);
+        reconnectionCount++;
+    }
+
+    AML_LOGI("client %s: connect to server\n", clientSocketData.clientName);
+}
+
+static void clientRegister2Server(void)
+{
+    AML_LOGI("client %s: in register2Server......\n", clientSocketData.clientName);
+    int msgLength = sizeof(clientSocketData.registerBitmap);
+    char msg[10];
+    sprintf(msg, "%d", clientSocketData.registerBitmap);
+    int len = ClientWriteMsg2Server(REGISTER, msg, msgLength);
+    if (len == msgLength + sizeof(MsgHeader)) {
+        AML_LOGI("client %s: register server message succeed......\n", clientSocketData.clientName);
+    } else {
+        AML_LOGE("client %s: register server message failed......\n", clientSocketData.clientName);
+        exit(-1);
+    }
+}
+
+static void handleClientConnection() {
+
+    clientInitConnection(&clientSocketData.sockfd, clientSocketData.connectIp, clientSocketData.connectPort);
+
+    pthread_mutex_lock(&clientSocketData.connectionStatusMutex);
+    clientSocketData.isConnected = true;
+    pthread_mutex_unlock(&clientSocketData.connectionStatusMutex);
+    if (clientSocketData.clientConnectedHandler) {
+        clientSocketData.clientConnectedHandler();
+    }
+
+    clientRegister2Server();
+}
+
+static void handleClientDisconnection() {
+    pthread_mutex_lock(&clientSocketData.connectionStatusMutex);
+    clientSocketData.isConnected = false;
+    pthread_mutex_unlock(&clientSocketData.connectionStatusMutex);
+    if (clientSocketData.clientDisconnectedHandler) {
+        clientSocketData.clientDisconnectedHandler();
+    }
+    if (clientSocketData.sockfd >= 0)
+        close(clientSocketData.sockfd);
+}
+
+static void handleClientReconnection() {
+    pthread_mutex_lock(&clientSocketData.reconnectionMutex);
+
+    handleClientDisconnection();
+    handleClientConnection();
+
+    pthread_mutex_unlock(&clientSocketData.reconnectionMutex);
+}
+
+static void* serverMessageDispatchWorker(void* arg)
+{
+    AML_LOGI("client %s: serverMessageDispatchWorker begin work......\n", clientSocketData.clientName);
+
+    while (1) {
+        // get header message part
+        MsgHeader header;
+        int length = sizeof(header);
+        int n = readn(clientSocketData.sockfd, &header, length);
+        if (n != length) {
+            if (0 == n) {
+                AML_LOGW("client %s: Disconnected with server, about to reconnect......\n", clientSocketData.clientName);
+                handleClientReconnection();
+            }
+            continue;
+        }
+        // get business message part
+        MessageType type = header.type;
+        int dataLength = header.dataLength;
+        if (type == BUSINESS_DATA) {
+            char businessData[dataLength];
+            int n = readn(clientSocketData.sockfd, businessData, sizeof(businessData));
+            if (n != dataLength) {
+                if (n == 0) {
+                    // Connection closed by the server, need to reconnect
+                    handleClientReconnection();
+                }
+                continue;
+            }
+            AML_LOGD("client %s: receive server business message......\n", clientSocketData.clientName);
+            clientSocketData.clientHandler(businessData);
+        } else if (type == HEARTBEAT) {
+            pthread_mutex_lock(&clientSocketData.beatMutex);
+            clientSocketData.beats = 0;
+            pthread_mutex_unlock(&clientSocketData.beatMutex);
+        }
+    }
+    return NULL;
+}
+
+static void* heartBeatDetector(void* arg)
+{
+    while (1) {
+        pthread_mutex_lock(&clientSocketData.beatMutex);
+        if (clientSocketData.beats > 30) {
+            AML_LOGW("client %s: disconnected with server because of the heartbeat timeout, about to reconnect......\n", clientSocketData.clientName);
+            handleClientReconnection();
+        } else {
+            clientSocketData.beats += 10;
+        }
+        pthread_mutex_unlock(&clientSocketData.beatMutex);
+        sleep(10);
+    }
+    return NULL;
+}
+
+void initClientData(ClientSocketData* clientSocketData, ClientInputData* clientInputData) {
+    if (!clientSocketData || !clientInputData) {
+        AML_LOGE("Null pointer passed to initClientData......\n");
+        return;
+    }
+
+    clientSocketData->sockfd = -1;
+    clientSocketData->beats = 0;
+
+    clientSocketData->connectIp = clientInputData->connectIp;
+    clientSocketData->clientName = clientInputData->clientName;
+    clientSocketData->connectPort = clientInputData->connectPort;
+    clientSocketData->registerBitmap = clientInputData->registerBitmap;
+
+    pthread_mutex_init(&clientSocketData->beatMutex, NULL);
+    pthread_mutex_init(&clientSocketData->writeMsgMutex, NULL);
+    pthread_mutex_init(&clientSocketData->connectionStatusMutex, NULL);
+    pthread_mutex_init(&clientSocketData->reconnectionMutex, NULL);
+
+    clientSocketData->dispatch = 0;
+    clientSocketData->clientHandler = clientInputData->clientHandler;
+    clientSocketData->clientConnectedHandler = clientInputData->clientConnectedHandler;
+}
+
+void ClientInit(ClientInputData* clientInputData)
+{
+    initClientData(&clientSocketData, clientInputData);
+    clientInitConnection(&clientSocketData.sockfd, clientSocketData.connectIp, clientSocketData.connectPort);
+    if (clientSocketData.clientConnectedHandler)
+        clientSocketData.clientConnectedHandler();
+    int ret = pthread_create(&clientSocketData.dispatch, NULL, serverMessageDispatchWorker, NULL);
+    if (ret != 0) {
+        AML_LOGE("client %s: serverMessageDispatchWorker pthread create failed......\n", clientSocketData.clientName);
+        exit(-1);
+    }
+    ret = pthread_create(&clientSocketData.heartBeatDetect, NULL, heartBeatDetector, NULL);
+    if (ret != 0) {
+        AML_LOGE("client %s: heartBeatDetector pthread create failed......\n", clientSocketData.clientName);
+        exit(-1);
+    }
+    clientRegister2Server();
+}
+
+void ClientExit(void)
+{
+    pthread_cancel(clientSocketData.dispatch);
+    pthread_join(clientSocketData.dispatch, NULL);
+    pthread_cancel(clientSocketData.heartBeatDetect);
+    pthread_join(clientSocketData.heartBeatDetect, NULL);
+
+    pthread_mutex_destroy(&clientSocketData.beatMutex);
+    pthread_mutex_destroy(&clientSocketData.writeMsgMutex);
+    pthread_mutex_destroy(&clientSocketData.connectionStatusMutex);
+    pthread_mutex_destroy(&clientSocketData.reconnectionMutex);
+
+    handleClientDisconnection();
+}
+
 int ClientWriteMsg2Server(MessageType msgType, void* msg, const int msgLength) {
     if (BUSINESS_DATA != msgType && REGISTER != msgType) {
-        AML_LOGW("Invalid message type, please send business data......\n");
+        AML_LOGW("client %s: Invalid message type, please send business data......\n", clientSocketData.clientName);
         return -1;
     }
     MsgHeader header;
@@ -59,132 +270,12 @@
     int sent_len = writen(clientSocketData.sockfd, buffer, totalSize);
     pthread_mutex_unlock(&clientSocketData.writeMsgMutex);
     if (sent_len != totalSize)
-        AML_LOGW("Invalid message type, please send business data......\n");
+        AML_LOGW("client %s: Failed to send message, please check connection status......\n", clientSocketData.clientName);
     return sent_len;
 }
 
-void register2Server(void)
-{
-    AML_LOGI("in register2Server......\n");
-    int msgLength = sizeof(clientSocketData.registerBitmap);
-    char msg[10];
-    sprintf(msg, "%d", clientSocketData.registerBitmap);
-    int len = ClientWriteMsg2Server(REGISTER, msg, msgLength);
-    if (len == msgLength + sizeof(MsgHeader)) {
-        AML_LOGI("register server message succeed......\n");
-    } else {
-        AML_LOGE("register server message failed......\n");
-        exit(-1);
-    }
-}
-
-void* msgDispatchWorker(void* arg)
-{
-    AML_LOGI("msgDispatchWorker begin work......\n");
-
-    while (1) {
-        // get header message part
-        MsgHeader header;
-        int length = sizeof(header);
-        int n = readn(clientSocketData.sockfd, &header, length);
-        if (n != length) {
-            if (0 == n) {
-                AML_LOGW("Disconnected with server, about to reconnect......\n");
-                pthread_mutex_lock(&clientSocketData.beatMutex);
-                close(clientSocketData.sockfd);
-                initConnection(&clientSocketData.sockfd, clientSocketData.connectIp, clientSocketData.connectPort);
-                register2Server();
-                pthread_mutex_unlock(&clientSocketData.beatMutex);
-            }
-            continue;
-        }
-
-        // get business message part
-        MessageType type = header.type;
-        int dataLength = header.dataLength;
-        if (type == BUSINESS_DATA) {
-            char businessData[8];
-            int n = readn(clientSocketData.sockfd, businessData, 8);
-            if (n != dataLength) {
-                if (n == 0) {
-                    // Connection closed by the server, need to reconnect
-
-                    pthread_mutex_lock(&clientSocketData.beatMutex);
-                    close(clientSocketData.sockfd);
-                    initConnection(&clientSocketData.sockfd, clientSocketData.connectIp, clientSocketData.connectPort);
-                    register2Server();
-                    pthread_mutex_unlock(&clientSocketData.beatMutex);
-                }
-                continue;
-            }
-            AML_LOGD("receive server business message......\n");
-            clientSocketData.clientHandler(businessData);
-        } else if (type == HEARTBEAT) {
-            pthread_mutex_lock(&clientSocketData.beatMutex);
-            clientSocketData.beats = 0;
-            AML_LOGD("receive server heart message......\n");
-            pthread_mutex_unlock(&clientSocketData.beatMutex);
-        }
-    }
-}
-
-void* heartBeatDetectWorker(void* arg)
-{
-    while (1) {
-        pthread_mutex_lock(&clientSocketData.beatMutex);
-        if (clientSocketData.beats > 30) {
-            AML_LOGW("Disconnected with server because of the heartbeat timeout., about to reconnect......\n");
-            close(clientSocketData.sockfd);
-            initConnection(&clientSocketData.sockfd, clientSocketData.connectIp, clientSocketData.connectPort);
-            register2Server();
-        } else {
-            clientSocketData.beats += 10;
-        }
-        pthread_mutex_unlock(&clientSocketData.beatMutex);
-        sleep(10);
-    }
-}
-
-void initClientData(ClientSocketData* clientSocketData, ClientInputData* clientInputData) {
-    if (!clientSocketData || !clientInputData) {
-        AML_LOGE("Null pointer passed to initClientData......\n");
-        return;
-    }
-
-    clientSocketData->sockfd = -1;
-    clientSocketData->beats = 0;
-
-    clientSocketData->connectIp = clientInputData->connectIp;
-    clientSocketData->connectPort = clientInputData->connectPort;
-    clientSocketData->registerBitmap = clientInputData->registerBitmap;
-
-    pthread_mutex_init(&clientSocketData->beatMutex, NULL);
-    pthread_mutex_init(&clientSocketData->writeMsgMutex, NULL);
-
-    clientSocketData->dispatch = 0;
-    clientSocketData->clientHandler = clientInputData->clientHandler;
-}
-
-void ClientInit(ClientInputData* clientInputData)
-{
-    initClientData(&clientSocketData, clientInputData);
-    initConnection(&clientSocketData.sockfd, clientSocketData.connectIp, clientSocketData.connectPort);
-    register2Server();
-    int ret = pthread_create(&clientSocketData.dispatch, NULL, msgDispatchWorker, NULL);
-    if (ret != 0) {
-        AML_LOGE("msgDispatchWorker pthread create failed......\n");
-        exit(-1);
-    }
-    ret = pthread_create(&clientSocketData.heartBeatDetect, NULL, heartBeatDetectWorker, NULL);
-    if (ret != 0) {
-        AML_LOGE("heartBeatDetectWorker pthread create failed......\n");
-        exit(-1);
-    }
-
-}
-
-void ClientExit(void)
-{
-    pthread_join(clientSocketData.dispatch, NULL);
-    pthread_join(clientSocketData.heartBeatDetect, NULL);
-}
+void ClientGetConnectionStatus(int* connectStatus) {
+    pthread_mutex_lock(&clientSocketData.connectionStatusMutex);
+    *connectStatus = clientSocketData.isConnected;
+    pthread_mutex_unlock(&clientSocketData.connectionStatusMutex);
+}
\ No newline at end of file
diff --git a/aml_socketipc_v2/common/socket_client.h b/aml_socketipc_v2/common/socket_client.h
index 5452c9a..d3c8fe2 100644
--- a/aml_socketipc_v2/common/socket_client.h
+++ b/aml_socketipc_v2/common/socket_client.h
@@ -34,35 +34,45 @@
 // Business general execution functions for messages from the server
 typedef void (*PerformActionForServerMessage)(char*);
 
-// Release of requested data
-typedef void (*FreeSpecificMessage)(void*);
+// Client connect or disconnect handler
+typedef void (*ClientConnectedHandleFunc)(void);
 
 typedef struct {
     int sockfd;
     int beats;
     char* connectIp;
+    char* clientName;
     int connectPort;
     int registerBitmap; //register the required bitmap
+    int isConnected;
 
     pthread_mutex_t beatMutex;
     pthread_mutex_t writeMsgMutex;
+    pthread_mutex_t connectionStatusMutex;
+    pthread_mutex_t reconnectionMutex;
     pthread_t dispatch;
     pthread_t heartBeatDetect;
 
     PerformActionForServerMessage clientHandler;
+    ClientConnectedHandleFunc clientConnectedHandler;
+    ClientConnectedHandleFunc clientDisconnectedHandler;
 } ClientSocketData;
 
 typedef struct {
     int connectPort;
     char* connectIp;
+    char* clientName;
     int registerBitmap;
 
     PerformActionForServerMessage clientHandler;
+    ClientConnectedHandleFunc clientConnectedHandler;
+    ClientConnectedHandleFunc clientDisconnectedHandler;
 } ClientInputData;
 
 void ClientInit(ClientInputData* clientInputData);
 void ClientExit(void);
 int ClientWriteMsg2Server(MessageType msgType, void* msg, const int msgLength);
+void ClientGetConnectionStatus(int* connectStatus);
 
 #ifdef __cplusplus
 }
diff --git a/aml_socketipc_v2/common/socket_server.c b/aml_socketipc_v2/common/socket_server.c
index c7724a0..4df479c 100644
--- a/aml_socketipc_v2/common/socket_server.c
+++ b/aml_socketipc_v2/common/socket_server.c
@@ -43,8 +43,12 @@
 
 void EnqueueServerMsg(void* msg, MessageType msgType, int msglength, int serverMsgType)
 {
+    if (NULL == serverSocketData.clientFdList->head) {
+        AML_LOGW("server %s: no connected client......\n", serverSocketData.serverName);
+        return;
+    }
     if (UNDEFINED == msgType) {
-        AML_LOGW("Invalid message type......\n");
+        AML_LOGW("server %s: invalid message type......\n", serverSocketData.serverName);
         return;
     }
     MsgHeader header;
@@ -100,9 +104,9 @@
                     int fd = *(int*)it->data;
                     // If the fd device registers for this event send msg
                     if ((it->nodeTypeData & (1 << serverMsgType)) != 0) {
-                        AML_LOGD("send business message to fd %d......\n", fd);
-                        if (write(fd, pMsg, dataLenth) != dataLenth)
-                            AML_LOGW("server write to client failed......\n");
+                        AML_LOGD("server %s: send business message to fd %d......\n", serverSocketData.serverName, fd);
+                        if (writen(fd, pMsg, dataLenth) != dataLenth)
+                            AML_LOGW("server %s: write to client failed......\n", serverSocketData.serverName);
                     }
                     it = it->next;
                 }
@@ -113,8 +117,8 @@
                 while (it != NULL)
                 {
                     int fd = *(int*)it->data;
-                    if (write(fd, pMsg, dataLenth) != dataLenth)
-                        AML_LOGW("server write to client failed......\n");
+                    if (writen(fd, pMsg, dataLenth) != dataLenth)
+                        AML_LOGW("server %s: write to client failed......\n", serverSocketData.serverName);
                     it = it->next;
                 }
             }
@@ -131,7 +135,8 @@
 void* heartBeatSenderWorker(void *arg)
 {
     while (1) {
-        EnqueueServerMsg(NULL, HEARTBEAT, 0, -1);
+        if (NULL != serverSocketData.clientFdList->head)
+            EnqueueServerMsg(NULL, HEARTBEAT, 0, -1);
         sleep(10);
     }
 }
@@ -139,13 +144,13 @@
 /*
     handle the registration message from the client
 */
-void handleRegisterMessage(char* bitmapStr, int fd) {
+static void handleRegisterMessage(char* bitmapStr, int fd) {
 
     int bitmapLen = sizeof(int) * 8;
 
     int bitmap = atoi(bitmapStr);
 
-    AML_LOGD("receive client register message from fd %d, bitmap: %d\n", fd, bitmap);
+    AML_LOGD("server %s: receive client register message from fd %d, bitmap: %d\n", serverSocketData.serverName, fd, bitmap);
 
     // int ptr need malloc, remember to free
     int* connfd_ptr = malloc(sizeof(int));
@@ -153,7 +158,7 @@
     push_back(serverSocketData.clientFdList, connfd_ptr, bitmap);
     for (int j = 0; j < bitmapLen; j++) {
         if ((bitmap & (1 << j )) != 0) {
-            AML_LOGD("server receive register %d , fd: %d \n", j, fd);
+            AML_LOGD("server %s: receive register %d , fd: %d \n", serverSocketData.serverName, j, fd);
         }
     }
 }
@@ -161,7 +166,7 @@
 /*
     listening to different events from client and handling them
 */
-void* epollEventHandlerWorker(void *arg)
+static void* epollEventHandlerWorker(void *arg)
 {
     int epollfd = epoll_create1(0);
     if (epollfd == -1) {
@@ -255,7 +260,7 @@
     close(epollfd);
 }
 
-void initServerData(ServerSocketData* serverSocketData, ServerInputData* serverInputData)
+static void initServerData(ServerSocketData* serverSocketData, ServerInputData* serverInputData)
 {
     if (!serverSocketData || !serverInputData) {
         AML_LOGE("Null pointer passed to initServerData......\n");
@@ -263,9 +268,12 @@
     }
 
     serverSocketData->serverHandler = serverInputData->serverHandler;
+    serverSocketData->serverName = serverInputData->serverName;
 
     serverSocketData->clientFdList = createList();
     serverSocketData->serverMsgsList= createList();
+    pthread_mutex_init(&serverSocketData->serverMsgsMutex, NULL);
+    pthread_cond_init(&serverSocketData->serverMsgsCond, NULL);
     createListener(&serverSocketData->listen_fd, serverInputData->connectPort);
 }
 
@@ -276,28 +284,34 @@
 
     int ret = pthread_create(&serverSocketData.epollEventHandler, NULL, epollEventHandlerWorker, NULL);
     if (ret != 0) {
-        AML_LOGE("epollEventHandlerWorker pthread create failed......\n");
+        AML_LOGE("server %s: epollEventHandlerWorker pthread create failed......\n", serverSocketData.serverName);
         exit(-1);
     }
     ret = pthread_create(&serverSocketData.messageSender, NULL, messageSenderWorker, NULL);
     if (ret != 0) {
-        AML_LOGE("messageSenderWorker pthread create failed......\n");
+        AML_LOGE("server %s: messageSenderWorker pthread create failed......\n", serverSocketData.serverName);
         exit(-1);
     }
     ret = pthread_create(&serverSocketData.heartBeatSender, NULL, heartBeatSenderWorker, NULL);
     if (ret != 0) {
-        AML_LOGE("heartBeatSenderWorker pthread create failed......\n");
+        AML_LOGE("server %s: heartBeatSenderWorker pthread create failed......\n", serverSocketData.serverName);
         exit(-1);
     }
 }
 
 void ServerExit(void)
 {
+    pthread_cancel(serverSocketData.epollEventHandler);
     pthread_join(serverSocketData.epollEventHandler, NULL);
-    pthread_join(serverSocketData.messageSender, NULL);
+    pthread_cancel(serverSocketData.heartBeatSender);
     pthread_join(serverSocketData.heartBeatSender, NULL);
+    pthread_cancel(serverSocketData.messageSender);
+    pthread_join(serverSocketData.messageSender, NULL);
     // free and close
+    pthread_mutex_destroy(&serverSocketData.serverMsgsMutex);
+    pthread_cond_destroy(&serverSocketData.serverMsgsCond);
+
     freeList(serverSocketData.clientFdList);
     freeList(serverSocketData.serverMsgsList);
     close(serverSocketData.listen_fd);
-}
\ No newline at end of file
+}
diff --git a/aml_socketipc_v2/common/socket_server.h b/aml_socketipc_v2/common/socket_server.h
index ba79d4d..c6df8c6 100644
--- a/aml_socketipc_v2/common/socket_server.h
+++ b/aml_socketipc_v2/common/socket_server.h
@@ -37,6 +37,7 @@
 
 typedef struct {
     int listen_fd;
+    char* serverName;
 
     List* clientFdList; // connected client fd
     List* serverMsgsList; // message need to send
@@ -52,6 +53,7 @@
 
 typedef struct {
     int connectPort;
+    char* serverName;
 
     PerformActionForClientMessage serverHandler;
 } ServerInputData;
diff --git a/aml_socketipc_v2/common/socket_util.c b/aml_socketipc_v2/common/socket_util.c
index 87ab06a..13d2531 100644
--- a/aml_socketipc_v2/common/socket_util.c
+++ b/aml_socketipc_v2/common/socket_util.c
@@ -134,7 +134,7 @@
 }
 
 // for client
-void initConnection(int* sockfd, const char *serverIP, int serverPort)
+void clientInitConnection(int* sockfd, const char *serverIP, int serverPort)
 {
     struct sockaddr_in serv_addr;
 
@@ -152,7 +152,7 @@
     }
 
     int ret;
-    int seconds = 0;
+    int reconnectionCount = 0;
 
     while (true) {
         ret = connect(*sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
@@ -170,15 +170,13 @@
             }
             break;
         default:
-            AML_LOGW("try to connect to server, elapsed time: %d seconds, ret=%d, errno=%d \n", seconds + 1, ret, errno);
-        }
-
-        if (seconds > 1 && ((seconds + 1) % 120 == 0)) {
-            AML_LOGE("Error: Socket reconnection timed out.\n");
-            exit(EXIT_FAILURE);
+            if (reconnectionCount > 1 && ((reconnectionCount + 1) % 10 == 0)) {
+                reconnectionCount = 0;
+                AML_LOGW("try to connect to server, ret=%d, errno=%d \n", ret, errno);
+            }
         }
         sleep(1);
-        seconds++;
+        reconnectionCount++;
     }
 
     AML_LOGI("connect to server\n");
diff --git a/aml_socketipc_v2/common/socket_util.h b/aml_socketipc_v2/common/socket_util.h
index ec67f63..1a2ac50 100644
--- a/aml_socketipc_v2/common/socket_util.h
+++ b/aml_socketipc_v2/common/socket_util.h
@@ -32,7 +32,7 @@
 // 1、Public interface for socket communication
 #define LOCALHOST_IP "127.0.0.1"
 #define DEFAULT_IP "127.0.0.1"
-#define DEFAULT_PORT 6800
+#define DEFAULT_PORT 6811
 
 // Basic socket operations
 // Read "n" bytes from a descriptor
@@ -46,10 +46,6 @@
 void setNonblocking(int fd);
 int createListener(int* listen_fd, int serverPort);
 
-// for client
-void initConnection(int* sockfd, const char *serverIP, int serverPort); //init socket;return sockfd
-
-
 typedef enum {
     UNDEFINED,
     BUSINESS_DATA,
diff --git a/aml_socketipc_v2/server/TestServer.c b/aml_socketipc_v2/server/TestServer.c
index 5292f0b..cb1a49d 100644
--- a/aml_socketipc_v2/server/TestServer.c
+++ b/aml_socketipc_v2/server/TestServer.c
@@ -169,6 +169,7 @@
 {
 
     serverInputData->connectPort = port;
+    serverInputData->serverName = "testServer";
 
     serverInputData->serverHandler = handleClientMsgAction;
 }