Fix a bug in recvfrom()

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3670 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2011-06-05 16:13:50 +00:00
parent 33a74e2ffa
commit 3f97ba4c55
4 changed files with 4 additions and 119 deletions

View File

@ -166,31 +166,6 @@ static int ftpc_recvinit(struct ftpc_session_s *session, FAR const char *path,
return ret;
}
/****************************************************************************
* Name: ftpc_waitinput
*
* Description:
* Wait to receive data.
*
****************************************************************************/
static int ftpc_waitinput(FAR struct ftpc_session_s *session)
{
int ret;
do {
ret = ftpc_waitdata(session, session->data.instream, true);
if (ret == -1) {
if (errno == EINTR)
{
FTPC_SET_INTERRUPT(session);
}
return ERROR;
}
} while(ret == 0);
return OK;
}
/****************************************************************************
* Name: ftpc_recvbinary
*
@ -219,16 +194,6 @@ static int ftpc_recvbinary(FAR struct ftpc_session_s *session,
for (;;)
{
/* Wait for input on the socket */
ret = ftpc_waitinput(session);
if (ret != OK)
{
nvdbg("ftpc_waitinput() failed\n");
err = EIO;
goto errout_with_buf;
}
/* Read the data from the socket */
nread = fread(buf, sizeof(char), CONFIG_FTP_BUFSIZE, rinstream);
@ -451,15 +416,6 @@ int ftpc_recvtext(FAR struct ftpc_session_s *session,
while ((ch = fgetc(rinstream)) != EOF)
{
/* Wait for input on the socket */
ret = ftpc_waitinput(session);
if (ret != OK)
{
nvdbg("ftpc_waitinput() failed\n");
break;
}
/* Is it a carriage return? Compress \r\n to \n */
if (ch == '\r')

View File

@ -71,30 +71,6 @@
* Private Functions
****************************************************************************/
/****************************************************************************
* Name: ftpc_waitoutput
*
* Description:
* Wait to send data.
*
****************************************************************************/
static int ftpc_waitoutput(FAR struct ftpc_session_s *session)
{
int ret;
do
{
ret = ftpc_waitdata(session, session->data.outstream, false);
if (ret < 0)
{
return ERROR;
}
}
while(ret == 0);
return OK;
}
/****************************************************************************
* Name: ftpc_sendbinary
*
@ -129,15 +105,6 @@ static int ftpc_sendbinary(FAR struct ftpc_session_s *session,
break;
}
/* Wait to make sure that we send the data without blocking */
ret = ftpc_waitoutput(session);
if (ret != OK)
{
ret = ERROR;
break;
}
/* Send the data */
nwritten = fwrite(buf, sizeof(char), nread, routstream);
@ -174,15 +141,8 @@ static int ftpc_sendtext(FAR struct ftpc_session_s *session,
/* Write characters one at a time. */
while((c = fgetc(linstream)) != EOF)
while ((c = fgetc(linstream)) != EOF)
{
/* Make sure that we can send the character without blocking */
if (ftpc_waitoutput(session) != 0)
{
break;
}
/* If it is a newline, send a carriage return too */
if (c == '\n')

View File

@ -185,8 +185,8 @@ int ftpc_sockconnect(struct ftpc_socket_s *sock, struct sockaddr_in *addr)
ndbg("ftpc_sockgetsockname() failed: %d\n", errno);
return ERROR;
}
sock->connected = true;
sock->connected = true;
return OK;
}

View File

@ -43,7 +43,6 @@
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <poll.h>
#include <signal.h>
#include <ctype.h>
#include <errno.h>
@ -289,8 +288,8 @@ int ftpc_xfrinit(FAR struct ftpc_session_s *session)
/* Configure the data socket */
ftpc_sockgetsockname(&session->cmd, &addr);
memcpy(&addr.sin_addr, addrport, (size_t)4);
memcpy(&addr.sin_port, addrport+4, (size_t)2);
memcpy(&addr.sin_addr, addrport, 4);
memcpy(&addr.sin_port, addrport+4, 2);
/* Connect the data socket */
@ -461,36 +460,6 @@ int ftpc_xfrabort(FAR struct ftpc_session_s *session, FAR FILE *stream)
return ERROR;
}
/****************************************************************************
* Name: ftpc_waitdata
*
* Description:
* Wait for dta to be available on the provided stream.
*
****************************************************************************/
int ftpc_waitdata(FAR struct ftpc_session_s *session, FAR FILE *stream, bool rdwait)
{
FAR struct pollfd fds;
int ret;
/* Check the stream to see if it has input OR is ready for output */
fds.fd = fileno(stream);
fds.events = rdwait ? POLLIN : POLLOUT;
ret = poll(&fds, 1, 10*1000);
if (ret < 0)
{
if (errno == EINTR)
{
return OK;
}
return ERROR;
}
return ret;
}
/****************************************************************************
* Name: ftpc_timeout
*