diff --git a/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h b/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
index 0049eb1..1a17fe9 100755
--- a/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
+++ b/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
@@ -10,9 +10,9 @@
 
 #ifndef __LYNQ_AT__
 #define __LYNQ_AT__
-//#ifdef __cplusplus
-//extern "C" {
-//#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /**
  * @brief
@@ -31,8 +31,8 @@
  */
 int lynq_reg_third_at(const char *ext_at, LYNQ_AT_CALLBACK callback);
 
-//#ifdef __cplusplus
-//}
-//#endif
+#ifdef __cplusplus
+}
+#endif
 
 #endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-at-extension/lynq_at.cpp b/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
index 8785310..28d9a4a 100755
--- a/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
+++ b/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
@@ -120,40 +120,43 @@
         LYDBGLOG("lose data when send to atci service. errno = %d", errno);
         return false;
     }
-    LYDBGLOG("send to app demo: %s", msg);
+    LYDBGLOG("client send to app demo: %s", msg);
     return true;
 }
 
 int atsvc_cmd_recv(int fd, char *buf, int len)
 {
+    LYINFLOG("[%d][%s] enter",LINE,FUNC);
     int ret = 0;
-    fd_set rfds;
-    //FD_CLR(fd, &rfds);
-    FD_SET(fd, &rfds);
-    ret = select(fd + 1, &rfds, NULL, NULL, NULL);
-    if (ret <= 0)
-    {
-        LYDBGLOG("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
-        return SOCKET_FAIL;
-    }
-    if (FD_ISSET(fd, &rfds))
-    {
+    // fd_set rfds;
+    // //FD_CLR(fd, &rfds);
+    // FD_SET(fd, &rfds);
+    // ret = select(fd + 1, &rfds, NULL, NULL, NULL);
+    // if (ret <= 0)
+    // {
+    //     LYDBGLOG("acti_cmd_recv client select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+    //     return SOCKET_FAIL;
+    // }
+    // if (FD_ISSET(fd, &rfds))
+    // {
+        LYDBGLOG("[%d][%s] recv before",LINE,FUNC);
         ret = recv(fd, buf, len, 0);
+        LYDBGLOG("[%d][%s] recv after",LINE,FUNC);
         if (ret < 0)
         {
-            LYDBGLOG("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+            LYDBGLOG("acti_cmd_recv client select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
             return SOCKET_FAIL;
         }
         else if(ret == 0)
         {
-            LYDBGLOG("acti_cmd_recv recv error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+            LYDBGLOG("acti_cmd_recv client recv error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
             return SOCKET_ZERO;
     }
-    else
-    {
-      //buf[ret] = '\0';
-    }
-  }
+    // else
+    // {
+    //   //buf[ret] = '\0';
+    // }
+//   }
   return SOCKET_SUCC;
 }
 /**
@@ -179,6 +182,7 @@
     fd = socket_local_client(AT_EXTERSION_SOCKET_NAME);
     if(fd <= 0)
     {
+        LYDBGLOG("socket_local_client  fail\n");
         connect_state = false;
         pthread_mutex_unlock(&s_startupMutex);
         return NULL;
@@ -186,6 +190,7 @@
     int len_buf = strlen(buffer_at);
     if(!send_msg_to_service(fd,buffer_at,len_buf))
     {
+        LYDBGLOG("send_msg_to_service  fail\n");
         connect_state = false;
         pthread_mutex_unlock(&s_startupMutex);
         return NULL;
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 3cd6be5..3b3b249 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
@@ -22,7 +22,7 @@
 char register_atcmd_buff[SOCKET_BUF_SIZE] = {0};
 char *white_list[] = {"AT","ATD","ATV","ATA","ATE","ATH","ATL","ATI","ATP","ATO","ATQ",NULL};
 int g_atsvc_socket_fd = 0;
-int g_atsvc_client_connect = 0;
+int g_atsvc_client_connect = -1;
 //struct sockaddr_in server_addr;
 //struct sockaddr_in lynqClient_addr;
 static pthread_mutex_t s_startupMutex = PTHREAD_MUTEX_INITIALIZER;
@@ -103,6 +103,11 @@
             { 
                 ALOGD("remove-%s fail and errno:%d", socket_name,errno); 
             }
+            while(access(socket_name, R_OK)==0)
+            {
+                ALOGD("%s still exist", socket_name);
+                usleep(10);
+            }
             ALOGD("remove %s", socket_name);
             local_addr->sun_family = AF_UNIX;
             sprintf(local_addr->sun_path, socket_name);
@@ -337,40 +342,51 @@
         LOGATCI(LOG_ERR, "lose data when send to atci service. errno = %d", errno);
         return -1;
     }
-    LOGATCI(LOG_DEBUG, "send to app demo: %s", atcmd);
+    LOGATCI(LOG_DEBUG, "service send to app demo: %s", atcmd);
     return 0;
 }
 int actsvc_cmd_recv(int fd, char *buf, int len)
 {
     int ret = 0;
-    fd_set rfds;
-    //FD_CLR(fd, &rfds);
-    FD_SET(fd, &rfds);
-    ret = select(fd + 1, &rfds, NULL, NULL, NULL);
-    if (ret <= 0)
-    {
-        ALOGE("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
-        return SOCKET_FAIL;
-    }
-    if (FD_ISSET(fd, &rfds))
-    {
+    // fd_set rfds;
+    // //FD_CLR(fd, &rfds);
+    // FD_SET(fd, &rfds);
+    // int res = -1;
+    // ret = select(fd + 1, &rfds, NULL, NULL, NULL);
+    // if (ret <= 0)
+    // {
+    //     ALOGE("acti_cmd_recv service select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+    //     return SOCKET_FAIL;
+    // }
+    // res = FD_ISSET(fd, &rfds);
+    // ALOGE("FD_ISSET num is %d ", res);
+    // if (res)
+    // {
+        ALOGE("[%d][%s] recv before",LINE,FUNC);
         ret = recv(fd, buf, len, 0);
+        ALOGE("[%d][%s] recv before",LINE,FUNC);
         if (ret < 0)
         {
-            ALOGE("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+            ALOGE("acti_cmd_recv service select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
             return SOCKET_FAIL;
         }
         else if(ret == 0)
         {
-            ALOGE("acti_cmd_recv recv error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+            ALOGE("acti_cmd_recv service recv error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
             return SOCKET_ZERO;
         }
         else
         {
             ALOGD("[%d][%s] buf is:%s",LINE,FUNC,buf);
+            return SOCKET_SUCC;
         }
-    }
-    return SOCKET_SUCC;
+    // }
+    // else
+    // {
+    //     ALOGE("FD_ISSET is error num is %d ", res);
+    //     return SOCKET_ZERO;
+    // }
+    //return SOCKET_SUCC;
 }
 
 void *start_at_extension_Socket(void * param)
@@ -386,6 +402,7 @@
         return NULL;
     }
     TryNewLink:
+    ALOGE("[%d][%s] TryNewLink!");
     client_len = sizeof(g_local_addr);
     int conn = accept(g_atsvc_socket_fd,(struct sockaddr *) &g_local_addr, &client_len);
     if (conn <= 0)
@@ -399,7 +416,7 @@
     {
         ALOGE("g_atsvc_client_connect need close!");
         close(g_atsvc_client_connect);
-        g_atsvc_client_connect = -1;
+        //g_atsvc_client_connect = -1;
     }
     g_atsvc_client_connect = conn;
     /* tranlate data */
@@ -411,6 +428,7 @@
             memset(register_atcmd_buff, 0, sizeof(register_atcmd_buff));
             ret = actsvc_cmd_recv(conn, register_atcmd_buff, SOCKET_BUF_SIZE);
             upper_string(register_atcmd_buff);
+            ALOGE("[%d][%s] ret %d has_registe_cmd %d",LINE,FUNC,ret,has_registe_cmd);
             if (ret < 0)
             {
                 ALOGE("[%d][%s]receive CMD error",LINE,FUNC);
@@ -426,6 +444,7 @@
         else
         {
             ret = actsvc_cmd_recv(conn, parser_buf, SOCKET_BUF_SIZE);
+            ALOGE("[%d][%s] ret %d has_registe_cmd %d",LINE,FUNC,ret,has_registe_cmd);
             if (ret < 0)
             {
                 ALOGE("[%d][%s]receive CMD error",LINE,FUNC);
