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
This commit is contained in:
patacongo
2012-02-18 18:13:30 +00:00
parent f60d578a46
commit f04310d559
24 changed files with 189 additions and 128 deletions
+2 -2
View File
@@ -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:
*
+1 -1
View File
@@ -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
+23 -25
View File
@@ -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;
}
+2 -2
View File
@@ -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:
*
+1 -1
View File
@@ -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 */
+2 -2
View File
@@ -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
+10 -2
View File
@@ -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 */
+3 -2
View File
@@ -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;
}
+7 -2
View File
@@ -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 */