diff --git a/ChangeLog b/ChangeLog index 6310804795c..f928eb02e8d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -572,4 +572,8 @@ to refill the input buffer. The old behavior (read full blocks) might be useful in other contexts, so it is still available within the driver as a configuration option. * Implement poll() and select() support for TCP/IP sockets + * Fixed an important bug in the TCP/IP buffering logic. When TCP/IP read-ahead is enabled + and not recv() is in-place when a TCP/IP packet is received, the packet is placed into + a read-ahead buffer. However, the old contents of the read-ahead buffer were not being + cleared and old data would contaminate the newly received buffer. diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html index 3273b7d95fc..39ba8dcc358 100644 --- a/Documentation/NuttX.html +++ b/Documentation/NuttX.html @@ -1208,6 +1208,10 @@ nuttx-0.3.19 2008-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> to refill the input buffer. The old behavior (read full blocks) might be useful in other contexts, so it is still available within the driver as a configuration option. * Implement poll() and select() support for TCP/IP sockets + * Fixed an important bug in the TCP/IP buffering logic. When TCP/IP read-ahead is enabled + and not recv() is in-place when a TCP/IP packet is received, the packet is placed into + a read-ahead buffer. However, the old contents of the read-ahead buffer were not being + cleared and old data would contaminate the newly received buffer. pascal-0.1.3 2008-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> diff --git a/net/uip/uip-tcpcallback.c b/net/uip/uip-tcpcallback.c index b99e41f9f82..71a2696d978 100644 --- a/net/uip/uip-tcpcallback.c +++ b/net/uip/uip-tcpcallback.c @@ -172,6 +172,7 @@ uip_dataevent(struct uip_driver_s *dev, struct uip_conn *conn, uint16 flags) if (readahead2) { + readahead2->rh_nbytes = 0; (void)uip_readahead(readahead2, buf, buflen); /* Save the readahead buffer in the connection structure where