diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-08-16 14:29:08 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-08-16 14:29:08 +0000 |
commit | cd37198d4a42c141d51c6b0608a22a25d6d4d6f0 (patch) | |
tree | 1ddfc4c41f787e1081cf2c60712499d3c50f51ba /nuttx/netutils/thttpd/thttpd.c | |
parent | 76cb110245eb7c55eb7c01226f0d2c3a9bed645f (diff) | |
download | px4-nuttx-cd37198d4a42c141d51c6b0608a22a25d6d4d6f0.tar.gz px4-nuttx-cd37198d4a42c141d51c6b0608a22a25d6d4d6f0.tar.bz2 px4-nuttx-cd37198d4a42c141d51c6b0608a22a25d6d4d6f0.zip |
Fix errors in handle_send
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2024 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/netutils/thttpd/thttpd.c')
-rw-r--r-- | nuttx/netutils/thttpd/thttpd.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/nuttx/netutils/thttpd/thttpd.c b/nuttx/netutils/thttpd/thttpd.c index bf0f27de4..fe109938e 100644 --- a/nuttx/netutils/thttpd/thttpd.c +++ b/nuttx/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; } |