From 3dcb78d3e09224443d7536e0692835418c2d2a02 Mon Sep 17 00:00:00 2001 From: "bernard.xiong@gmail.com" Date: Sat, 20 Aug 2011 14:34:05 +0000 Subject: [PATCH] optimize netio code. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1674 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/net/lwip/apps/netio.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/components/net/lwip/apps/netio.c b/components/net/lwip/apps/netio.c index 48d016bf7..0466cc5f6 100644 --- a/components/net/lwip/apps/netio.c +++ b/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){ -- GitLab