diff --git a/ChangeLog b/ChangeLog
index e0316a37a9..6543fbad91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -232,4 +232,5 @@
* Add strcat() and strncat()
* Integrated uIP micro webserver
+ * Corrected a serious bug in TCP queue management
diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html
index d277aaa2b9..2bee653cd0 100644
--- a/Documentation/NuttX.html
+++ b/Documentation/NuttX.html
@@ -8,7 +8,7 @@
NuttX RTOS
- Last Updated: November 19, 2007
+ Last Updated: November 20, 2007
|
@@ -693,6 +693,7 @@ Other memory:
* Add strcat() and strncat()
* Integrated uIP micro webserver
+ * Corrected a serious bug in TCP queue management
diff --git a/net/uip/uip-tcpconn.c b/net/uip/uip-tcpconn.c
index 952db87742..96849d9262 100644
--- a/net/uip/uip-tcpconn.c
+++ b/net/uip/uip-tcpconn.c
@@ -304,7 +304,7 @@ void uip_tcpfree(struct uip_conn *conn)
{
/* Remove the connection from the active list */
- dq_rem(&conn->node, &g_free_tcp_connections);
+ dq_rem(&conn->node, &g_active_tcp_connections);
}
/* Release any read-ahead buffers attached to the connection */
diff --git a/netutils/webserver/httpd.c b/netutils/webserver/httpd.c
index 4564a76521..1f360c1abc 100644
--- a/netutils/webserver/httpd.c
+++ b/netutils/webserver/httpd.c
@@ -469,7 +469,7 @@ static void *httpd_handler(void *arg)
if (pstate)
{
/* Loop processing each HTTP command */
- do
+// do
{
/* Re-initialize the thread state structure */
@@ -480,7 +480,7 @@ static void *httpd_handler(void *arg)
ret = httpd_cmd(pstate);
}
- while (ret == OK);
+// while (ret == OK);
/* End of command processing -- Clean up and exit */
diff --git a/netutils/webserver/httpd.h b/netutils/webserver/httpd.h
index 031d90187c..7e70ccd41a 100644
--- a/netutils/webserver/httpd.h
+++ b/netutils/webserver/httpd.h
@@ -54,9 +54,22 @@
****************************************************************************/
#define HTTPD_FS_STATISTICS 1
-#define HTTPD_IOBUFFER_SIZE UIP_TCP_MSS
+
+/* For efficiency reasons, the size of the IO buffer should be a multiple
+ * of the TCP MSS value. Also, the current design requires that the IO
+ * buffer be sufficiently large to contain the entire GET request.
+ */
+
+#define HTTPD_IOBUFFER_SIZE (3*UIP_TCP_MSS)
+
+/* this is the maximum size of a file path */
+
#define HTTPD_MAX_FILENAME 20
+/* As threads are created to handle each request, a stack must be allocated
+ * for the thread. Use a default if the user provided no stacksize.
+ */
+
#ifndef CONFIG_EXAMPLES_UIP_HTTPDSTACKSIZE
# define CONFIG_EXAMPLES_UIP_HTTPDSTACKSIZE 4096
#endif