[Bugfix][API-835][At-extension]client connection failed.
Change-Id: I54fcffdc2a52a8c9e2f1fc2127209c15e39f39c2
diff --git a/src/lynq/lib/liblynq-at-extension/lynq_at.cpp b/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
index 28d9a4a..80c6588 100755
--- a/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
+++ b/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
@@ -95,7 +95,7 @@
if (connect(sockfd, (struct sockaddr *) &addr_server, sizeof(struct sockaddr_un)) < 0)
{
close(sockfd);
- LYDBGLOG("Can't connect to server side, path: %s, errno:%d", name, errno);
+ LYDBGLOG("Can't connect to server side, path: %s, %s", name, strerror(errno));
return -1;
}
LYINFLOG("[%d][%s] connect %s success",LINE,FUNC,name);
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c
index 3b3b249..5952c5a 100755
--- a/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c
@@ -1,4 +1,5 @@
#include <stdio.h>
+#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/types.h>
@@ -30,6 +31,8 @@
struct sockaddr_un g_remote_addr = {0};
struct sockaddr_un g_local_addr = {0};
+int g_create_socket = 0;
+
typedef enum
{
INIT_SUCCESS=0,
@@ -101,7 +104,7 @@
}
if (remove(socket_name) == -1 && errno != ENOENT)
{
- ALOGD("remove-%s fail and errno:%d", socket_name,errno);
+ ALOGD("remove-%s fail and errno:%d", socket_name,errno);
}
while(access(socket_name, R_OK)==0)
{
@@ -111,9 +114,17 @@
ALOGD("remove %s", socket_name);
local_addr->sun_family = AF_UNIX;
sprintf(local_addr->sun_path, socket_name);
- if(bind(socket_fd, (struct sockaddr *)local_addr, sizeof(struct sockaddr_un)) == -1)
+ // local_addr->sun_family = AF_UNIX;
+ // memset(local_addr->sun_path,'\0',sizeof(local_addr->sun_path));
+ // strncpy(local_addr->sun_path, socket_name, sizeof(local_addr->sun_path) - 1);
+ // unlink(socket_name);
+ //sprintf(local_addr->sun_path, socket_name);
+ //strncpy(local_addr.sun_path, socket_name)
+ if(bind(socket_fd, (struct sockaddr *)local_addr, sizeof(struct sockaddr_un)) < 0)
{
- ALOGD("[%d][%s]bind fail and errno: %d",LINE,FUNC,errno);
+ ALOGD("bind failed name=[%s] reason=[%s]\n", socket_name, strerror(errno));
+ //ALOGD("[%d][%s]bind fail and errno: %d",LINE,FUNC,errno);
+ close(g_atsvc_socket_fd);
return -1;
}
if(type == SOCK_STREAM)
@@ -121,6 +132,7 @@
if(listen(socket_fd,backlog) == -1)
{
ALOGD("[%d]listen fd: %dfail",LINE);
+ close(g_atsvc_socket_fd);
return -1;
}
}
@@ -395,14 +407,27 @@
socklen_t client_len;
int ret;
char parser_buf[SOCKET_BUF_SIZE];
+ TryNewSocket:
g_atsvc_socket_fd = create_socket(AF_UNIX, SOCK_STREAM,0, 0, NULL,RIL_SOCKET_NAME, (void *)&g_local_addr, 2);
if(0 > g_atsvc_socket_fd)
{
ALOGD("init socket fail and fd:%d",g_atsvc_socket_fd);
- return NULL;
+ g_create_socket++;
+ if(g_create_socket == 10)
+ {
+ ALOGD("create_socket max try count is %d\n", g_create_socket);
+ return NULL;
+ }
+ else
+ {
+ ALOGD("create_socket try again %d\n", g_create_socket);
+ usleep(500*1000);
+ goto TryNewSocket;
+ }
}
+ g_create_socket = 0;
TryNewLink:
- ALOGE("[%d][%s] TryNewLink!");
+ ALOGE("[%d][%s] TryNewLink!", LINE,FUNC);
client_len = sizeof(g_local_addr);
int conn = accept(g_atsvc_socket_fd,(struct sockaddr *) &g_local_addr, &client_len);
if (conn <= 0)