Răsfoiți Sursa

optimize netio code.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1674 bbd45198-f89e-11dd-88c7-29a3b14d5316
bernard.xiong@gmail.com 13 ani în urmă
părinte
comite
3dcb78d3e0
1 a modificat fișierele cu 12 adăugiri și 6 ștergeri
  1. 12 6
      components/net/lwip/apps/netio.c

+ 12 - 6
components/net/lwip/apps/netio.c

@@ -183,6 +183,7 @@ netio_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
           }
 
         } else if (ns->state == NETIO_STATE_RECV_DATA) {
+          int chunk_length;
 
           if(ns->cntr == 0){
             /* save the first byte of this new round of data
@@ -191,13 +192,18 @@ netio_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
              */
             ns->first_byte = *data_ptr;
           }
-
-          ns->buf_ptr[ns->buf_pos++] = *data_ptr++;
-          ns->cntr++;
-
-          if (ns->buf_pos == NETIO_BUF_SIZE) {
+          
+          if (ns->cntr + (data_cntr + 1) < ns->data_len) chunk_length = data_cntr + 1;
+          else chunk_length = (ns->data_len - ns->cntr);
+          
+          ns->buf_pos += chunk_length;
+          data_ptr += chunk_length;
+          ns->cntr += chunk_length;
+          data_cntr -= (chunk_length - 1);
+
+          if (ns->buf_pos >= NETIO_BUF_SIZE) {
             /* circularize the buffer */
-            ns->buf_pos = 0;
+            ns->buf_pos %= NETIO_BUF_SIZE;
           }
 
           if(ns->cntr == ns->data_len){