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;
}