Fix socket and tcp api.

Change-Id: I256eefee0c874377e66b334958b353c1ee66c2c5
diff --git a/mbtk/mbtk_lib/src/mbtk_tcpip_at.c b/mbtk/mbtk_lib/src/mbtk_tcpip_at.c
index 2ecef9d..8c1003a 100755
--- a/mbtk/mbtk_lib/src/mbtk_tcpip_at.c
+++ b/mbtk/mbtk_lib/src/mbtk_tcpip_at.c
@@ -182,7 +182,7 @@
             int sock_error = 0;
             socklen_t socklen = sizeof(sock_error);
             if(getsockopt(sock_info->sock_fd, SOL_SOCKET, SO_ERROR, &sock_error, (socklen_t*)&socklen) == 0) {
-                LOGD("Socket error:%d", sock_error);
+                LOGV("Socket error:%d", sock_error);
             }
 
             if(sock_error) {
@@ -194,9 +194,9 @@
                 struct tcp_info info;
                 int len = sizeof(info);
                 if(getsockopt(sock_info->sock_fd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t*)&len) == 0) {
-                    LOGD("State : %d", info.tcpi_state);
+                    LOGV("State : %d", info.tcpi_state);
 #if TCPIP_DEBUG
-                    tcp_info_print(&info);
+                    //tcp_info_print(&info);
 #endif
                 }
 
@@ -217,7 +217,7 @@
         }
 
         if(sock_info->event & EPOLLIN) { // READ
-            LOGD("fd[%d] can read.", sock_info->sock_fd);
+            LOGV("fd[%d] can read.", sock_info->sock_fd);
             int link_id = tcpip_fd_2_link(sock_info->sock_fd);
             if(link_id >= 0) {
                 if(tcpip_link[link_id].type == MBTK_TCPIP_TYPE_CLIENT) {
@@ -497,9 +497,8 @@
             LOGE("Set read_cb function,can not manual read.");
             return -1;
         }
-        int err;
-        int len = mbtk_sock_read(tcpip_handle, tcpip_link[link_id].tcpip_info.cli_info.sock_fd,
-                    buff, buff_size, 3000, &err);
+        int len = mbtk_sock_read_async(tcpip_handle, tcpip_link[link_id].tcpip_info.cli_info.sock_fd,
+                    buff, buff_size);
         if(len > 0) {
             tcpip_link[link_id].tcpip_info.cli_info.data_traffic_recv += len;
         }
@@ -564,3 +563,78 @@
     return tcpip_link[link_id].link_connected ? 1 : 0;
 }
 
+/*
+* Get TCP state informations.
+*/
+int mbtk_tcpip_info_get(int link_id, mbtk_tcpip_tcp_state_info_s *state_info)
+{
+    if(!tcpip_link_check(link_id)) {
+        LOGE("Link error.");
+        return -1;
+    }
+
+    if(state_info == NULL) {
+        LOGE("ARG error.");
+        return -1;
+    }
+
+    memset(state_info, 0x0, sizeof(mbtk_tcpip_tcp_state_info_s));
+
+    struct tcp_info info;
+    memset(&info, 0x0, sizeof(struct tcp_info));
+    int len = sizeof(info);
+    if(tcpip_link[link_id].prot_type == MBTK_SOCK_TCP) {
+        if(getsockopt(tcpip_link[link_id].tcpip_info.cli_info.sock_fd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t*)&len)) {
+            LOGE("Get TCP_INFO fail:%d", errno);
+            return -1;
+        }
+
+#if TCPIP_DEBUG
+        tcp_info_print(&info);
+#endif
+        state_info->state = info.tcpi_state;
+    } else {
+        state_info->state = 0;
+    }
+
+#if TCPIP_DEBUG
+    int rcvbuf_size;
+    len = sizeof(rcvbuf_size);
+    if(getsockopt(tcpip_link[link_id].tcpip_info.cli_info.sock_fd, SOL_SOCKET, SO_RCVBUF, &rcvbuf_size, (socklen_t*)&len)) {
+        LOGE("Get SO_RCVBUF fail:%d", errno);
+        return -1;
+    }
+    LOGD("SO_RCVBUF = %d", rcvbuf_size);
+
+    int sndbuf_size;
+    len = sizeof(sndbuf_size);
+    if(getsockopt(tcpip_link[link_id].tcpip_info.cli_info.sock_fd, SOL_SOCKET, SO_SNDBUF, &sndbuf_size, (socklen_t*)&len)) {
+        LOGE("Get SO_SNDBUF fail:%d", errno);
+        return -1;
+    }
+    LOGD("SO_SNDBUF = %d", sndbuf_size);
+
+    int rcvlowat_size;
+    len = sizeof(rcvlowat_size);
+    if(getsockopt(tcpip_link[link_id].tcpip_info.cli_info.sock_fd, SOL_SOCKET, SO_RCVLOWAT, &rcvlowat_size, (socklen_t*)&len)) {
+        LOGE("Get SO_RCVLOWAT fail:%d", errno);
+        return -1;
+    }
+    LOGD("SO_RCVLOWAT = %d", rcvlowat_size);
+
+    int sndlowat_size;
+    len = sizeof(sndlowat_size);
+    if(getsockopt(tcpip_link[link_id].tcpip_info.cli_info.sock_fd, SOL_SOCKET, SO_SNDLOWAT, &sndlowat_size, (socklen_t*)&len)) {
+        LOGE("Get SO_SNDLOWAT fail:%d", errno);
+        return -1;
+    }
+    LOGD("SO_SNDLOWAT = %d", sndlowat_size);
+#endif
+
+    state_info->link_id = link_id;
+    state_info->sock_fd = tcpip_link[link_id].tcpip_info.cli_info.sock_fd;
+    state_info->recv_data_len = mbtk_sock_tcp_recv_len_get(tcpip_handle, tcpip_link[link_id].tcpip_info.cli_info.sock_fd);
+
+    return 0;
+}
+