📄 telnet.c,v
字号:
head 1.2;
access;
symbols;
locks
dls:1.2; strict;
comment @ * @;
1.2
date 93.04.27.22.06.23; author dls; state Fix;
branches;
next 1.1;
1.1
date 93.04.14.02.36.06; author dls; state Old;
branches;
next ;
desc
@@
1.2
log
@*** empty log message ***
@
text
@/* telnet.c - telnet */
#include <sys/param.h>
#include <sys/time.h>
#include <sys/signal.h>
#include <sys/resource.h>
#include <sys/errno.h>
#include <poll.h>
#include <termios.h>
#include <stdio.h>
#include "local.h"
int rcvurg();
extern int errno;
extern char *sys_errlist[];
#define NFDS 2 /* number of fd's (for poll) */
#define BUFSIZE 2048 /* read buffer size */
struct termios oldtty;
/*------------------------------------------------------------------------
* telnet - do the TELNET protocol to the given host and port
*------------------------------------------------------------------------
*/
int
telnet(host, service)
char *host;
char *service;
{
int d, nfds; /* TLI descriptor & # file descriptors */
FILE *rfp; /* buffered FILE pointer for remote */
struct rlimit rlm; /* to get max file descriptor number */
struct pollfd fds[NFDS];
u_char buf[BUFSIZE];
int cc;
int on = 1;
d = clientTCP(host, service);
rwaddTLI(d);
rfp = fdopen(d, "w"); /* for buffered remote output */
ttysetup();
fsmbuild(); /* set up FSM's */
(void) signal(SIGURG, rcvurg);
if (getrlimit(RLIMIT_NOFILE, &rlm) < 0)
nfds = NOFILE;
nfds = rlm.rlim_cur;
fds[0].fd = 0; /* standard input */
fds[0].events = POLLIN;
fds[1].fd = d; /* the TLI descriptor */
fds[1].events = POLLIN;
while (1) {
if (poll(fds, NFDS, -1) < 0) {
if (errno == EINTR)
continue; /* just a signal */
cerrexit("poll: %s\n", sys_errlist[errno]);
}
if (fds[1].revents & POLLIN) { /* TLI desc */
cc = read(d, (char *)buf, sizeof(buf));
if (cc < 0)
cerrexit("TLI read: %s\n",
sys_errlist[errno]);
else if (cc == 0) {
printf("\nconnection closed.\n");
if (tcsetattr(0, TCSADRAIN, &oldtty) < 0)
errexit("tcsetattr: %s\n",
sys_errlist[errno]);
exit(0);
} else
ttwrite(rfp, stdout, buf, cc);
}
if (fds[0].revents & POLLIN) { /* stdin desc */
cc = read(0, (char *)buf, sizeof(buf));
if (cc < 0)
cerrexit("tty read: %s\n",
sys_errlist[errno]);
else if (cc == 0) {
fds[0].fd = -1;
(void) shutdown(d, 1);
} else
tewrite(rfp, stdout, buf, cc);
}
(void) fflush(stdout);
(void) fflush(rfp);
}
}
@
1.1
log
@Initial revision
@
text
@a3 1
#include <sys/types.h>
d9 1
d20 1
a20 1
#define BUFSIZE 2048 /* read buffer size */
d22 2
d38 1
a41 1
fd_set arfds, awfds, rfds, wfds;
d58 4
a61 4
FD_ZERO(&arfds);
FD_ZERO(&awfds);
FD_SET(d, &arfds); /* the TLI descriptor */
FD_SET(0, &arfds); /* standard input */
d64 1
a64 5
bcopy((char *)&arfds, (char *)&rfds, sizeof(rfds));
bcopy((char *)&awfds, (char *)&wfds, sizeof(rfds));
if (select(nfds, &rfds, &wfds, (fd_set *)0,
(struct timeval *)0) < 0) {
d67 1
a67 1
cerrexit("select: %s\n", sys_errlist[errno]);
d69 1
a69 1
if (FD_ISSET(d, &rfds)) {
d83 1
a83 1
if (FD_ISSET(0, &rfds)) {
d89 1
a89 1
FD_CLR(0, &arfds);
@
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -