summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-02-18 18:13:30 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-02-18 18:13:30 +0000
commitfadbb925a6a118790d8d661fea3956bb0f76348a (patch)
treeca4c58d32d12949e8d08cb69a652b5e3f7fd0e58 /apps
parent376af5201c555ee163045a8103d8e592f9a1b1bc (diff)
downloadpx4-nuttx-fadbb925a6a118790d8d661fea3956bb0f76348a.tar.gz
px4-nuttx-fadbb925a6a118790d8d661fea3956bb0f76348a.tar.bz2
px4-nuttx-fadbb925a6a118790d8d661fea3956bb0f76348a.zip
Correct and error in recv() and recvfrom() return value
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4402 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps')
-rwxr-xr-xapps/examples/ftpd/ftpd_main.c10
-rw-r--r--apps/examples/nettest/nettest_client.c7
-rw-r--r--apps/examples/nettest/nettest_server.c16
-rw-r--r--apps/examples/poll/host.c9
-rw-r--r--apps/examples/poll/net_listener.c4
-rw-r--r--apps/examples/poll/net_reader.c4
-rw-r--r--apps/examples/udp/udp-server.c4
-rw-r--r--apps/netutils/dhcpc/dhcpc.c4
-rw-r--r--apps/netutils/dhcpd/dhcpd.c2
-rwxr-xr-xapps/netutils/ftpd/ftpd.c48
-rw-r--r--apps/netutils/resolv/resolv.c4
-rw-r--r--apps/netutils/tftpc/tftpc_get.c2
-rw-r--r--apps/netutils/tftpc/tftpc_packets.c4
-rw-r--r--apps/netutils/tftpc/tftpc_put.c12
-rw-r--r--apps/netutils/webclient/webclient.c5
-rw-r--r--apps/netutils/webserver/httpd.c9
16 files changed, 92 insertions, 52 deletions
diff --git a/apps/examples/ftpd/ftpd_main.c b/apps/examples/ftpd/ftpd_main.c
index d4808a4aa..fbabf64de 100755
--- a/apps/examples/ftpd/ftpd_main.c
+++ b/apps/examples/ftpd/ftpd_main.c
@@ -188,7 +188,15 @@ int ftpd_daemon(int s_argc, char **s_argv)
*/
ret = ftpd_session(handle, 5000);
- printf("FTP daemon [%d] ftpd_session returned %d\n", g_ftpdglob.pid, ret);
+
+ /* If any interesting happened (i.e., any thing other than a timeout),
+ * then report the interesting event.
+ */
+
+ if (ret != -ETIMEDOUT)
+ {
+ printf("FTP daemon [%d] ftpd_session returned %d\n", g_ftpdglob.pid, ret);
+ }
}
/* Close the FTPD server and exit (we can get here only if
diff --git a/apps/examples/nettest/nettest_client.c b/apps/examples/nettest/nettest_client.c
index 5f95d7b70..d498feb31 100644
--- a/apps/examples/nettest/nettest_client.c
+++ b/apps/examples/nettest/nettest_client.c
@@ -1,7 +1,7 @@
/****************************************************************************
* examples/nettest/nettest-client.c
*
- * Copyright (C) 2007, 2011 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2007, 2011-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -169,6 +169,11 @@ void send_client(void)
message("client: recv failed: %d\n", errno);
goto errout_with_socket;
}
+ else if (nbytesrecvd == 0)
+ {
+ message("client: The server closed the connection\n");
+ goto errout_with_socket;
+ }
totalbytesrecvd += nbytesrecvd;
message("client: Received %d of %d bytes\n", totalbytesrecvd, SENDSIZE);
}
diff --git a/apps/examples/nettest/nettest_server.c b/apps/examples/nettest/nettest_server.c
index 45ef3a39a..76a20e652 100644
--- a/apps/examples/nettest/nettest_server.c
+++ b/apps/examples/nettest/nettest_server.c
@@ -1,7 +1,7 @@
/****************************************************************************
* examples/nettest/nettest-server.c
*
- * Copyright (C) 2007, 2011 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2007, 2011-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -149,11 +149,16 @@ void recv_server(void)
for (;;)
{
nbytesread = recv(acceptsd, buffer, 2*SENDSIZE, 0);
- if (nbytesread <= 0)
+ if (nbytesread < 0)
{
message("server: recv failed: %d\n", errno);
goto errout_with_acceptsd;
}
+ else if (nbytesread == 0)
+ {
+ message("server: The client broke the connection\n");
+ goto errout_with_acceptsd;
+ }
message("Received %d bytes\n", nbytesread);
}
#else
@@ -164,11 +169,16 @@ void recv_server(void)
{
message("server: Reading...\n");
nbytesread = recv(acceptsd, &buffer[totalbytesread], 2*SENDSIZE - totalbytesread, 0);
- if (nbytesread <= 0)
+ if (nbytesread < 0)
{
message("server: recv failed: %d\n", errno);
goto errout_with_acceptsd;
}
+ else if (nbytesread == 0)
+ {
+ message("server: The client broke the connection\n");
+ goto errout_with_acceptsd;
+ }
totalbytesread += nbytesread;
message("server: Received %d of %d bytes\n", totalbytesread, SENDSIZE);
diff --git a/apps/examples/poll/host.c b/apps/examples/poll/host.c
index 47f2c3e53..302cceb0f 100644
--- a/apps/examples/poll/host.c
+++ b/apps/examples/poll/host.c
@@ -1,8 +1,8 @@
/****************************************************************************
* examples/poll/host.c
*
- * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -137,6 +137,11 @@ int main(int argc, char **argv, char **envp)
message("client: recv failed: %d\n", errno);
goto errout_with_socket;
}
+ else if (nbytesrecvd == 0)
+ {
+ message("client: The server broke the connections\n");
+ goto errout_with_socket;
+ }
inbuf[nbytesrecvd] = '\0';
message("client: Received '%s' (%d bytes)\n", inbuf, nbytesrecvd);
diff --git a/apps/examples/poll/net_listener.c b/apps/examples/poll/net_listener.c
index 4d425c608..4bde567fb 100644
--- a/apps/examples/poll/net_listener.c
+++ b/apps/examples/poll/net_listener.c
@@ -1,8 +1,8 @@
/****************************************************************************
* examples/poll/net_listener.c
*
- * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/apps/examples/poll/net_reader.c b/apps/examples/poll/net_reader.c
index b0cf94316..ea0accc8d 100644
--- a/apps/examples/poll/net_reader.c
+++ b/apps/examples/poll/net_reader.c
@@ -1,8 +1,8 @@
/****************************************************************************
* examples/poll/net_reader.c
*
- * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/apps/examples/udp/udp-server.c b/apps/examples/udp/udp-server.c
index 495a71320..1f4774deb 100644
--- a/apps/examples/udp/udp-server.c
+++ b/apps/examples/udp/udp-server.c
@@ -1,8 +1,8 @@
/****************************************************************************
* examples/udp/udp-server.c
*
- * Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2007, 2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/apps/netutils/dhcpc/dhcpc.c b/apps/netutils/dhcpc/dhcpc.c
index b5551c6f1..4e59d2371 100644
--- a/apps/netutils/dhcpc/dhcpc.c
+++ b/apps/netutils/dhcpc/dhcpc.c
@@ -1,8 +1,8 @@
/****************************************************************************
* netutils/dhcpc/dhcpc.c
*
- * Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2007, 2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Based heavily on portions of uIP:
*
diff --git a/apps/netutils/dhcpd/dhcpd.c b/apps/netutils/dhcpd/dhcpd.c
index 66bf76f81..6c14c6196 100644
--- a/apps/netutils/dhcpd/dhcpd.c
+++ b/apps/netutils/dhcpd/dhcpd.c
@@ -1,7 +1,7 @@
/****************************************************************************
* netutils/dhcpd/dhcpd.c
*
- * Copyright (C) 2007-2009, 2011 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
diff --git a/apps/netutils/ftpd/ftpd.c b/apps/netutils/ftpd/ftpd.c
index f6ddf64b8..3db7b1603 100755
--- a/apps/netutils/ftpd/ftpd.c
+++ b/apps/netutils/ftpd/ftpd.c
@@ -796,7 +796,7 @@ static int ftpd_rxpoll(int sd, int timeout)
if (ret == 0)
{
- nvdbg("poll() timed out\n");
+ //nvdbg("poll() timed out\n");
return -ETIMEDOUT;
}
else if (ret < 0)
@@ -870,7 +870,14 @@ static int ftpd_accept(int sd, FAR void *addr, FAR socklen_t *addrlen,
ret = ftpd_rxpoll(sd, timeout);
if (ret < 0)
{
- nvdbg("ftpd_rxpoll() failed: %d\n", ret);
+ /* Only report interesting, infrequent errors (not the common timeout) */
+
+#ifdef CONFIG_DEBUG_NET
+ if (ret != -ETIMEDOUT)
+ {
+ ndbg("ftpd_rxpoll() failed: %d\n", ret);
+ }
+#endif
return ret;
}
}
@@ -909,34 +916,18 @@ static ssize_t ftpd_recv(int sd, FAR void *data, size_t size, int timeout)
}
}
- /* Receive the data... waiting if necessary */
+ /* Receive the data... waiting if necessary. The client side will break the
+ * connection after the file has been sent. Zero (end-of-file) should be
+ * received in this case.
+ */
ret = recv(sd, data, size, 0);
if (ret < 0)
{
int errval = errno;
- /* Special case some TCP read errors. The client side will break the
- * connection after the file has been sent.
- */
-#warning FIXME
- /* When the client breaks the connection, the NuttX socket layer will
- * return an error with errno == ENOTCONN. This is wrong! It should
- * return 0 (end-of-file) in that case! We work around the bug and
- * report end-of-file for that case here. This needs to be fixed
- * someday.
- */
-
- if (errval == ENOTCONN)
- {
- nvdbg("Connection lost, returning end-of-file\n");
- ret = 0;
- }
- else
- {
- ndbg("recv() failed: %d\n", errval);
- return -errval;
- }
+ ndbg("recv() failed: %d\n", errval);
+ return -errval;
}
return ret;
@@ -4342,7 +4333,14 @@ int ftpd_session(FTPD_SESSION handle, int timeout)
&session->cmd.addrlen, timeout);
if (session->cmd.sd < 0)
{
- ndbg("ftpd_accept() failed: %d\n", session->cmd.sd);
+ /* Only report interesting, infrequent errors (not the common timeout) */
+
+#ifdef CONFIG_DEBUG_NET
+ if (session->cmd.sd != -ETIMEDOUT)
+ {
+ ndbg("ftpd_accept() failed: %d\n", session->cmd.sd);
+ }
+#endif
ret = session->cmd.sd;
goto errout_with_session;
}
diff --git a/apps/netutils/resolv/resolv.c b/apps/netutils/resolv/resolv.c
index db9e00085..98d1b28e8 100644
--- a/apps/netutils/resolv/resolv.c
+++ b/apps/netutils/resolv/resolv.c
@@ -12,8 +12,8 @@
* the resolver code calls a callback function called resolv_found()
* that must be implemented by the module that uses the resolver.
*
- * Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2007, 2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Based heavily on portions of uIP:
*
diff --git a/apps/netutils/tftpc/tftpc_get.c b/apps/netutils/tftpc/tftpc_get.c
index bfae1a3b7..b2170ec39 100644
--- a/apps/netutils/tftpc/tftpc_get.c
+++ b/apps/netutils/tftpc/tftpc_get.c
@@ -234,7 +234,7 @@ int tftpget(const char *remote, const char *local, in_addr_t addr, bool binary)
/* Check if anything valid was received */
- if (nbytesrecvd >= 0)
+ if (nbytesrecvd > 0)
{
/* Verify the sender address and port number */
diff --git a/apps/netutils/tftpc/tftpc_packets.c b/apps/netutils/tftpc/tftpc_packets.c
index d43410ff4..d1370efd8 100644
--- a/apps/netutils/tftpc/tftpc_packets.c
+++ b/apps/netutils/tftpc/tftpc_packets.c
@@ -1,8 +1,8 @@
/****************************************************************************
* netuils/tftp/tftpc_packets.c
*
- * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/apps/netutils/tftpc/tftpc_put.c b/apps/netutils/tftpc/tftpc_put.c
index c292244a6..b36599718 100644
--- a/apps/netutils/tftpc/tftpc_put.c
+++ b/apps/netutils/tftpc/tftpc_put.c
@@ -217,9 +217,17 @@ static int tftp_rcvack(int sd, uint8_t *packet, struct sockaddr_in *server,
{
/* Failed to receive a good packet */
- if (nbytes >= 0)
+ if (nbytes == 0)
{
- ndbg("tftp_recvfrom short packet: %d bytes\n", nbytes);
+ ndbg("Connection lost: %d bytes\n", nbytes);
+ }
+ else if (nbytes > 0)
+ {
+ ndbg("Short packet: %d bytes\n", nbytes);
+ }
+ else
+ {
+ ndbg("Recveid failure\n");
}
/* Break out to bump up the retry count */
diff --git a/apps/netutils/webclient/webclient.c b/apps/netutils/webclient/webclient.c
index e52f592f5..05a63ba38 100644
--- a/apps/netutils/webclient/webclient.c
+++ b/apps/netutils/webclient/webclient.c
@@ -2,8 +2,8 @@
* netutils/webclient/webclient.c
* Implementation of the HTTP client.
*
- * Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2007, 2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Based on uIP which also has a BSD style license:
*
@@ -526,6 +526,7 @@ int wget(FAR const char *url, FAR char *buffer, int buflen,
}
else if (ret == 0)
{
+ nvdbg("Connection lost\n");
close(sockfd);
break;
}
diff --git a/apps/netutils/webserver/httpd.c b/apps/netutils/webserver/httpd.c
index 9322b58dc..bf03a8094 100644
--- a/apps/netutils/webserver/httpd.c
+++ b/apps/netutils/webserver/httpd.c
@@ -2,8 +2,8 @@
* netutils/webserver/httpd.c
* httpd Web server
*
- * Copyright (C) 2007-2009, 2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* This is a leverage of similar logic from uIP:
*
@@ -380,6 +380,11 @@ static inline int httpd_cmd(struct httpd_state *pstate)
ndbg("[%d] recv failed: %d\n", pstate->ht_sockfd, errno);
return ERROR;
}
+ lese if (recvlen == 0)
+ {
+ ndbg("[%d] connection lost\n", pstate->ht_sockfd);
+ return ERROR;
+ }
httpd_dumpbuffer("Incoming buffer", pstate->ht_buffer, recvlen);
/* We will handle only GET */