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..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);
@@ -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/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index d1e2293..741220e 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -422,12 +422,12 @@
     {
         update=0;       
         pthread_cond_wait(&s_notice_get_call_list_cond, &s_notice_get_call_list_mutex);
-        LYDBGLOG("triggerGetCallList event!!!");
+        LYINFLOG("triggerGetCallList event %p!!!", pthread_self());
         memset(call_list,0,sizeof(call_list));
         ret = lynq_get_current_call_list(call_list);
         if(ret != RESULT_OK)
         {
-            LYDBGLOG("get current call list failure!!!");          
+            LYERRLOG("get current call list failure!!!");
             continue;
         }
         LYINFLOG("++++++++++++++triggerGetCallList++++++++++++++");
@@ -595,10 +595,11 @@
 
 void lynqNoticeGetModuleCallList()
 {
+    LYINFLOG("RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED send start");
     pthread_mutex_lock(&s_notice_get_call_list_mutex);
     pthread_cond_signal(&s_notice_get_call_list_cond);
     pthread_mutex_unlock(&s_notice_get_call_list_mutex);
-    
+    LYINFLOG("RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED send end");
 }
 
 #if 0
diff --git a/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp b/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
index 4b6f020..8d012da 100755
--- a/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
+++ b/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
@@ -24,7 +24,7 @@
 #define LYNQ_REQUEST_PARAM_BUF 8192
 #define LYNQ_REC_BUF 8192
 
-#define USER_LOG_TAG "LYNQ_NETWORK"
+#define USER_LOG_TAG "LYNQ_SMS"
 
 typedef struct{
     int uToken;
@@ -319,7 +319,7 @@
     char urc_data[LYNQ_REC_BUF];
     int res = 0;
     lynq_head_t* phead;
-   
+    int level,index,size;
     LYINFLOG("urc recv thread is running");
     while(module_urc_status)
     {
@@ -330,7 +330,7 @@
             LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
             continue;
         }
-        LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+        LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
         phead=(lynq_head_t*) urc_data;
         if(is_support_urc(phead->urcid)==false)
         {
@@ -342,8 +342,8 @@
             LYERRLOG("new parcel failure!!!");
             continue;
         }
-        LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
-        int level,index,size;
+        LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+        
         if(urc_data_is_in_shm_data(phead->resp_type,level,index,size))
         {
             LYINFLOG("__FUNCTION__ %s __LINE__ %d,use share memory\n", __FUNCTION__, __LINE__);
@@ -367,14 +367,14 @@
             s_recv_urc_parcel_list.push_back(urc_p);            
             BLOCK_WAKEUP_PROCESS_URC_MSG();
             BLOCK_PROCESS_URC_MSG_UNLOCK();
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
         }
         else 
         {
             delete urc_p;
             urc_p = NULL;
         }
-        LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);        
+        LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);        
     }
     LYINFLOG("urc recv thread ended");
     return NULL;
@@ -397,9 +397,9 @@
         BLOCK_PROCESS_URC_MSG_LOCK();
         while(s_recv_urc_parcel_list.empty())
         {
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
             BLOCK_WAIT_PROCESS_URC_MSG();
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
         }  
         iter=s_recv_urc_parcel_list.begin();
         urc_p=(*iter);
@@ -408,11 +408,11 @@
         urc_p->setDataPosition(0);
         if(urc_p->dataAvail()>0)
         {
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
             pthread_mutex_lock(&s_urc_mutex);
             urc_msg_process(urc_p);            
             pthread_mutex_unlock(&s_urc_mutex);
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
         }
         delete urc_p;
         urc_p = NULL;
diff --git a/src/lynq/lib/liblynq-sms/lynq_sms.cpp b/src/lynq/lib/liblynq-sms/lynq_sms.cpp
index 46f2119..ddf12b9 100755
--- a/src/lynq/lib/liblynq-sms/lynq_sms.cpp
+++ b/src/lynq/lib/liblynq-sms/lynq_sms.cpp
@@ -87,7 +87,7 @@
     }
     g_module_init_flag = MODULE_SWITCHING;
 
-    LYLOGSET(LOG_DEBUG);
+    LYLOGSET(LOG_INFO);
     LYLOGEINIT(USER_LOG_TAG);   
 
     g_module_Global_uToken = uToken;
diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index d0c3c32..25e429b 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -370,7 +370,11 @@
         usleep(300*1000);
         system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=ap0 disconnect");
     }
-
+    ret = system("wl -i wlan0 PM 0");
+    if( ret != 0)
+    {
+        printf("Set sta PM work mode to 0 fail,ret is%d",ret);
+    }
     if (g_ap_watcher_pid == 0 ) {
         ret=pthread_create(&g_ap_watcher_pid,NULL,APWatcherThreadProc,NULL);
         if(ret<0){
@@ -593,7 +597,7 @@
     if (NULL == mac || NULL == ip)
         return -1;
     memset(ip, 0, ip_len);
-    sprintf(cmd, "ip neigh | grep \"lladdr\" | grep \"tether\" | grep \"%s\" | head -1 | awk '{print $1}'", mac);
+    sprintf(cmd, "ip n s | grep \"lladdr\" | grep \"%s\" | head -1 | awk '{print $1}'", mac);
     ret = exec_cmd(cmd, ip, ip_len);
     p = strchr(ip, '\n');
     if (NULL != p)
@@ -758,7 +762,7 @@
         else if (strstr( flag, "NONE") != NULL) {
             return LYNQ_WIFI_AUTH_OPEN;
         }
-        else if (strcmp( flag, "[ESS]") == 0) {
+        else if (strcmp( flag, "[ESS]") == 0 || strcmp( flag,"[WPS][ESS]") == 0) {
             return LYNQ_WIFI_AUTH_OPEN;
         }
     }
@@ -930,6 +934,27 @@
 
     return 0;
 }
+
+static int lynq_check_frequencyby_country_code(int input_frequency)
+{
+    char str_cnc[]="CN";
+    char str_dest[20]="";
+
+    if( lynq_get_country_code(1,str_dest) != 0 )
+    {
+        printf("get country_code error\n");
+	return -1;
+    }
+    if( strncmp(str_dest,str_cnc,2) != 0 )
+    {
+        return 0;
+    }else if( 2473 < input_frequency && input_frequency < 5744)
+    {
+        printf("input frequency is bad\n");
+	return -1;
+    } 
+    return 0;
+}
 int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
 {
     int check;
@@ -944,6 +969,13 @@
         printf("do check frequency error\n");
         return -1;
     }
+    check = lynq_check_frequencyby_country_code(lynq_wifi_frequency);
+    if(check != 0)
+    {
+        printf("do check frequency error\n");
+        return -1;
+    }
+
     if (lynq_check_network_number(idx, CTRL_AP, AP_NETWORK_0) != 0)
     {
         return -1;
@@ -1000,7 +1032,7 @@
         }
         case LYNQ_WIFI_BANDWIDTH_HT40:
 		{
-            char lynq_cmd_bandwith[MAX_CMD]="wl chanspec 153u";
+            char lynq_cmd_bandwith[MAX_CMD]="wl chanspec 149/40";
             sprintf(lynq_cmd_bandwith, "wl chanspec ");
             system("wl down");
             if (system(lynq_cmd_bandwith) != 0 ){
@@ -1011,7 +1043,7 @@
 		}
         case LYNQ_WIFI_BANDWIDTH_HT80:
 		{
-            char lynq_cmd_bandwith[MAX_CMD]="wl chanspec 36/80";
+            char lynq_cmd_bandwith[MAX_CMD]="wl chanspec 149/80";
             system("wl down");
             if (system(lynq_cmd_bandwith) != 0 ){
                 return -1;
@@ -1555,6 +1587,9 @@
              break;
         }
 
+        if (p == NULL)
+            return -1;
+
         ssid = strstr(p, "ssid=");
         if (ssid != NULL) {
             ssid += strlen("ssid=");
@@ -1604,9 +1639,12 @@
             continue;
         }
 
-        strcpy(password, p);
+        if (*p == '\"')
+            p++;
+        strncpy(password, p, 64);
 
-        while(*password != '\0') {
+        p = password;
+        while(password - p < 64 && *password != '\0') {
             if (*password == '\"') {
                 *password = '\0';
                 break;
@@ -2243,8 +2281,14 @@
 
     CHECK_WPA_CTRL(CTRL_STA);
 
-    DO_OK_FAIL_REQUEST(lynq_scan_cmd);
     g_sta_scan_finish_flag = 0;
+    DO_REQUEST(lynq_scan_cmd);
+    if (reply_len >=9 && memcmp(cmd_reply, "FAIL-BUSY", 9) == 0 ) {
+        return 0;
+    } else if (reply_len >=2 && memcmp(cmd_reply, "OK", 2) != 0) {
+        g_sta_scan_finish_flag = 1;
+        return -1;
+    }
 
     return 0;
 }
diff --git a/src/lynq/lib/libpoweralarm/libpoweralarm.c b/src/lynq/lib/libpoweralarm/libpoweralarm.c
index 0cc3eb8..162484e 100644
--- a/src/lynq/lib/libpoweralarm/libpoweralarm.c
+++ b/src/lynq/lib/libpoweralarm/libpoweralarm.c
@@ -42,7 +42,7 @@
     
     time_buff = (char*)malloc(100);
     bzero(time_buff,100);
-
+    system("hwclock -w -f /dev/rtc0");
     sprintf(time_buff,"echo +%ld > %s",sec,RTCFILE_POWERALARM); //write formatted data into time_buff
     system(time_buff);
     ALOGI(time_buff);
@@ -75,7 +75,7 @@
     
     time_buff = (char*)malloc(100);
     bzero(time_buff,100);
-
+    system("hwclock -w -f /dev/rtc0");
     sprintf(time_buff,"echo +%ld > %s",sec,RTCFILE_WAKEALARM); //write formatted data into time_buff
     system(time_buff);
     ALOGI(time_buff);
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..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>
@@ -22,7 +23,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;
@@ -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,14 +104,27 @@
             }
             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)
+            {
+                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);
-            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)
@@ -116,6 +132,7 @@
                 if(listen(socket_fd,backlog) == -1)
                 {
                     ALOGD("[%d]listen fd: %dfail",LINE);
+                    close(g_atsvc_socket_fd);
                     return -1;
                 }
             }
@@ -337,40 +354,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)
@@ -379,13 +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!", 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)
@@ -399,7 +441,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 +453,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 +469,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);
