diff options
author | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2012-02-18 18:13:30 +0000 |
---|---|---|
committer | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2012-02-18 18:13:30 +0000 |
commit | f04310d55941bf5e4db3a71a5d3eaca6a6f89616 (patch) | |
tree | ca4c58d32d12949e8d08cb69a652b5e3f7fd0e58 /apps | |
parent | f60d578a461ee991f5eb42f9ae0dd2e7def75f75 (diff) | |
download | px4-firmware-f04310d55941bf5e4db3a71a5d3eaca6a6f89616.tar.gz px4-firmware-f04310d55941bf5e4db3a71a5d3eaca6a6f89616.tar.bz2 px4-firmware-f04310d55941bf5e4db3a71a5d3eaca6a6f89616.zip |
Correct and error in recv() and recvfrom() return value
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4402 7fd9a85b-ad96-42d3-883c-3090e2eb8679
Diffstat (limited to 'apps')
-rwxr-xr-x | apps/examples/ftpd/ftpd_main.c | 10 | ||||
-rw-r--r-- | apps/examples/nettest/nettest_client.c | 7 | ||||
-rw-r--r-- | apps/examples/nettest/nettest_server.c | 16 | ||||
-rw-r--r-- | apps/examples/poll/host.c | 9 | ||||
-rw-r--r-- | apps/examples/poll/net_listener.c | 4 | ||||
-rw-r--r-- | apps/examples/poll/net_reader.c | 4 | ||||
-rw-r--r-- | apps/examples/udp/udp-server.c | 4 | ||||
-rw-r--r-- | apps/netutils/dhcpc/dhcpc.c | 4 | ||||
-rw-r--r-- | apps/netutils/dhcpd/dhcpd.c | 2 | ||||
-rwxr-xr-x | apps/netutils/ftpd/ftpd.c | 48 | ||||
-rw-r--r-- | apps/netutils/resolv/resolv.c | 4 | ||||
-rw-r--r-- | apps/netutils/tftpc/tftpc_get.c | 2 | ||||
-rw-r--r-- | apps/netutils/tftpc/tftpc_packets.c | 4 | ||||
-rw-r--r-- | apps/netutils/tftpc/tftpc_put.c | 12 | ||||
-rw-r--r-- | apps/netutils/webclient/webclient.c | 5 | ||||
-rw-r--r-- | apps/netutils/webserver/httpd.c | 9 |
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 */ |