From fadbb925a6a118790d8d661fea3956bb0f76348a Mon Sep 17 00:00:00 2001 From: patacongo Date: Sat, 18 Feb 2012 18:13:30 +0000 Subject: 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 --- apps/netutils/ftpd/ftpd.c | 48 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 25 deletions(-) (limited to 'apps/netutils/ftpd') 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; } -- cgit v1.2.3