From 98fe680d4b806da9e80f2ad41fe01f84274c9ff3 Mon Sep 17 00:00:00 2001
From: patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>
Date: Sun, 16 Aug 2009 14:29:08 +0000
Subject: [PATCH] Fix errors in handle_send

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2024 42af7a65-404d-4744-a932-0658087f49c3
---
 netutils/thttpd/thttpd.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/netutils/thttpd/thttpd.c b/netutils/thttpd/thttpd.c
index bf0f27de48..fe109938eb 100644
--- a/netutils/thttpd/thttpd.c
+++ b/netutils/thttpd/thttpd.c
@@ -474,11 +474,16 @@ static void handle_send(struct connect_s *conn, struct timeval *tv)
       ndbg("File read error: %d\n", errno);
       goto errout_clear_connection;
     }
+  nvdbg("Read %d bytes, buflen %d\n", nread, hc->buflen);
 
   /* Send the buffer */
 
   if (hc->buflen > 0)
     {
+      /* httpd_write does not return until all bytes have been sent
+       * (or an error occurs).
+       */
+ 
       nwritten = httpd_write(hc->conn_fd, hc->buffer, hc->buflen);
       if (nwritten < 0)
         {
@@ -495,21 +500,27 @@ static void handle_send(struct connect_s *conn, struct timeval *tv)
 
       /* And update how much of the file we wrote */
 
-      conn->offset         += nread;
-      conn->hc->bytes_sent += nread;
+      conn->offset         += nwritten;
+      conn->hc->bytes_sent += nwritten;
+      nvdbg("Wrote %d bytes\n", nwritten);
     }
 
   /* Are we done? */
 
+  nvdbg("offset: %d end_offset: %d bytes_sent: %d\n",
+        conn->offset, conn->end_offset, conn->hc->bytes_sent);
+
   if (conn->offset >= conn->end_offset)
     {
       /* This connection is finished! */
 
+      nvdbg("Finish connection\n");
       finish_connection(conn, tv);
-      return;
     }
+  return;
 
 errout_clear_connection:
+  ndbg("Clear connection\n");
   clear_connection(conn, tv);
   return;
 }
-- 
GitLab