diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index b7498a6..0bff5b4 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -19,6 +19,8 @@
 #include "lynq_data_urc.h"
 
 #define LYNQ_SERVICE_PORT 8088
+#define LYNQ_RIL_FWK_IP "127.0.0.1"
+
 #define LYNQ_REC_BUF 8192
 #define LYNQ_REQUEST_PARAM_BUF 8192
 #define LYQN_SEDN_BUF 1024*8+sizeof(int)*3
@@ -497,10 +499,10 @@
 int send_request(int sockfd,lynq_client_t *client_tmp)
 {
     int ret=0;
-    ret = write(sockfd, client_tmp, LYQN_SEDN_BUF);
+    ret = sendto(sockfd,client_tmp,LYQN_SEDN_BUF,0,(struct sockaddr *)&lynq_data_socket_server_addr,lynq_data_socket_server_addr_len);
     if(ret==-1)
     {
-        perror("write error");
+        LYERRLOG("%s:errno code:%d",__FUNCTION__,errno);
         return -1;
     }
     return 0;
@@ -521,32 +523,36 @@
 /*Warren add for T800 platform 2021/11/19 start*/
 int lynq_socket_client_start()
 {
-    /* init lynq_socket_server_addr */
-    bzero(&lynq_data_socket_server_addr, sizeof(lynq_data_socket_server_addr));
-    lynq_data_socket_server_addr.sin_family = AF_INET;
-    lynq_data_socket_server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
-    lynq_data_socket_server_addr.sin_addr.s_addr = htons(INADDR_ANY);
-    lynq_data_socket_server_addr_len = sizeof(lynq_data_socket_server_addr);
-    /*
-    if(inet_pton(AF_INET,"127.0.0.1", &lynq_socket_server_addr.sin_addr) <= 0)
-    {
-        printf("[%s] is not a valid IPaddress\n", argv[1]);
-        exit(1);
-    }
-*/
-    lynq_client_sockfd = socket(AF_INET, SOCK_DGRAM, 0);
-    struct timeval timeOut; 
+    int ret;
+    struct timeval timeOut;
+    struct sockaddr_in liblynq_data_socket;
 
+    ret = 0;
     timeOut.tv_sec = 30;
     timeOut.tv_usec = 0; 
+    bzero(&liblynq_data_socket, sizeof(liblynq_data_socket));
+    bzero(&lynq_data_socket_server_addr, sizeof(lynq_data_socket_server_addr));
+    
+    //set this lib socket config 
+    liblynq_data_socket.sin_family = AF_INET;
+    liblynq_data_socket.sin_addr.s_addr = inet_addr(LYNQ_RIL_FWK_IP);
 
+    //set ril service socket config
+    lynq_data_socket_server_addr.sin_family = AF_INET;
+    lynq_data_socket_server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
+    lynq_data_socket_server_addr.sin_addr.s_addr = inet_addr(LYNQ_RIL_FWK_IP);
+    lynq_data_socket_server_addr_len = sizeof(lynq_data_socket_server_addr);
+
+    lynq_client_sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+    ret = bind(lynq_client_sockfd, (struct sockaddr *)&liblynq_data_socket, sizeof(liblynq_data_socket));
+    if (-1 == ret)
+    {
+        LYERRLOG("liblynq_data_socket bind fail,errno:%d",errno);
+        return -1;
+    }
     if (setsockopt(lynq_client_sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0) 
     { 
-        LYERRLOG("time out setting failed"); 
-    } 
-    if(connect(lynq_client_sockfd, (struct sockaddr *)&lynq_data_socket_server_addr, sizeof(lynq_data_socket_server_addr)) == -1)
-    {
-        perror("connect error");
+        LYERRLOG("time out setting failed,errno:%d",errno);
         return -1;
     }
     return 0;
