summaryrefslogtreecommitdiff
path: root/apps/netutils/telnetd
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-20 00:41:33 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-20 00:41:33 +0000
commit5128effaf839159a5d0897c0d6a3cc4790b55514 (patch)
treec6747a24d9b95fcc7d54938f8cbbcc0cd7bfca06 /apps/netutils/telnetd
parent097833173cfac12be60593a000e8d737c46ac428 (diff)
downloadnuttx-5128effaf839159a5d0897c0d6a3cc4790b55514.tar.gz
nuttx-5128effaf839159a5d0897c0d6a3cc4790b55514.tar.bz2
nuttx-5128effaf839159a5d0897c0d6a3cc4790b55514.zip
Yet another repair for the previouis botched recvfrom() fix; Fix telnet driver: It needs to break out of the read loop if 0 (meaning not conneced) of a value < 0 (an error) is encountered.
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5541 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/netutils/telnetd')
-rw-r--r--apps/netutils/telnetd/telnetd_driver.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/apps/netutils/telnetd/telnetd_driver.c b/apps/netutils/telnetd/telnetd_driver.c
index 1183a2f70..274fde370 100644
--- a/apps/netutils/telnetd/telnetd_driver.c
+++ b/apps/netutils/telnetd/telnetd_driver.c
@@ -558,6 +558,8 @@ static ssize_t telnetd_read(FAR struct file *filep, FAR char *buffer, size_t len
{
if (priv->td_pending > 0)
{
+ /* Process the buffered telnet data */
+
FAR const char *src = &priv->td_rxbuffer[priv->td_offset];
ret = telnetd_receive(priv, src, priv->td_pending, buffer, len);
}
@@ -568,13 +570,25 @@ static ssize_t telnetd_read(FAR struct file *filep, FAR char *buffer, size_t len
{
ret = psock_recv(&priv->td_psock, priv->td_rxbuffer,
CONFIG_TELNETD_RXBUFFER_SIZE, 0);
+
+ /* Did we receive anything? */
+
if (ret > 0)
{
- /* Process the received telnet data */
+ /* Yes.. Process the newly received telnet data */
telnetd_dumpbuffer("Received buffer", priv->td_rxbuffer, ret);
ret = telnetd_receive(priv, priv->td_rxbuffer, ret, buffer, len);
}
+
+ /* Otherwise the peer closed the connection (ret == 0) or an error
+ * occurred (ret < 0).
+ */
+
+ else
+ {
+ break;
+ }
}
}
while (ret == 0);
@@ -746,7 +760,7 @@ FAR char *telnetd_driver(int sd, FAR struct telnetd_s *daemon)
* instance resided in the daemon's socket array).
*/
- psock = sockfd_socket(sd);
+ psock = sockfd_socket(sd);
if (!psock)
{
nlldbg("Failed to convert sd=%d to a socket structure\n", sd);