[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox-cvs
Subject:    [git commit master 1/1] telnet: do not check for 0 return from poll (it's impossible)
From:       vda.linux () googlemail ! com (Denys Vlasenko)
Date:       2010-10-29 0:33:38
Message-ID: 20101029003426.D61148D554 () busybox ! osuosl ! org
[Download RAW message or body]


commit: http://git.busybox.net/busybox/commit/?id=ec07420eb914f6ca62273c54790853ccf22636e8
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/telnet.c |   48 ++++++++++++++++++++++++------------------------
 1 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/networking/telnet.c b/networking/telnet.c
index 0cf28f6..f6fad68 100644
--- a/networking/telnet.c
+++ b/networking/telnet.c
@@ -603,39 +603,39 @@ int telnet_main(int argc UNUSED_PARAM, char **argv)
 
 	signal(SIGINT, record_signo);
 
-	ufds[0].fd = 0; ufds[1].fd = netfd;
-	ufds[0].events = ufds[1].events = POLLIN;
+	ufds[0].fd = STDIN_FILENO;
+	ufds[0].events = POLLIN;
+	ufds[1].fd = netfd;
+	ufds[1].events = POLLIN;
 
 	while (1) {
-		switch (poll(ufds, 2, -1)) {
-		case 0:
-			/* timeout */
-		case -1:
+		if (poll(ufds, 2, -1) < 0) {
 			/* error, ignore and/or log something, bay go to loop */
 			if (bb_got_signal)
 				con_escape();
 			else
 				sleep(1);
-			break;
-		default:
-
-			if (ufds[0].revents) {
-				len = safe_read(STDIN_FILENO, G.buf, DATABUFSIZE);
-				if (len <= 0)
-					doexit(EXIT_SUCCESS);
-				TRACE(0, ("Read con: %d\n", len));
-				handle_net_output(len);
-			}
+			continue;
+		}
+
+// FIXME: reads can block. Need full bidirectional buffering.
+
+		if (ufds[0].revents) {
+			len = safe_read(STDIN_FILENO, G.buf, DATABUFSIZE);
+			if (len <= 0)
+				doexit(EXIT_SUCCESS);
+			TRACE(0, ("Read con: %d\n", len));
+			handle_net_output(len);
+		}
 
-			if (ufds[1].revents) {
-				len = safe_read(netfd, G.buf, DATABUFSIZE);
-				if (len <= 0) {
-					full_write1_str("Connection closed by foreign host\r\n");
-					doexit(EXIT_FAILURE);
-				}
-				TRACE(0, ("Read netfd (%d): %d\n", netfd, len));
-				handle_net_input(len);
+		if (ufds[1].revents) {
+			len = safe_read(netfd, G.buf, DATABUFSIZE);
+			if (len <= 0) {
+				full_write1_str("Connection closed by foreign host\r\n");
+				doexit(EXIT_FAILURE);
 			}
+			TRACE(0, ("Read netfd (%d): %d\n", netfd, len));
+			handle_net_input(len);
 		}
 	} /* while (1) */
 }
-- 
1.7.1


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic