diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-10-29 04:33:38 +0400 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-10-29 04:33:38 +0400 |
commit | ec07420eb914f6ca62273c54790853ccf22636e8 (patch) | |
tree | 50b034e4e30babc01edb968e442db82776ebfc1e /networking/telnet.c | |
parent | 036dbb9d9ab239bbd7eecad8580876c9c3e57dc5 (diff) |
telnet: do not check for 0 return from poll (it's impossible)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/telnet.c')
-rw-r--r-- | networking/telnet.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/networking/telnet.c b/networking/telnet.c index 0cf28f641..f6fad684c 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) */ } |