1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- /* tonet dest - copy stdin to dest, after dialing dest */
- #include <u.h>
- #include <libc.h>
- enum { TIMEOUT = 10*60*1000 };
- int
- alarmhandler(void *, char *note)
- {
- if(strcmp(note, "alarm") == 0) {
- fprint(2, "alarm\n");
- return 1;
- } else
- return 0;
- }
- void
- pass(int in, int out)
- {
- int rv = 0;
- static char buf[4096];
- for(;;) {
- alarm(TIMEOUT); /* to break hanging */
- rv = read(in, buf, sizeof buf);
- if (rv == 0)
- break;
- if(rv < 0)
- sysfatal("read error: %r");
- if(write(out, buf, rv) != rv)
- sysfatal("write error: %r");
- }
- alarm(0);
- }
- static void
- usage(void)
- {
- fprint(2, "usage: %s network!destination!service\n", argv0);
- exits("usage");
- }
- void
- main(int argc, char *argv[])
- {
- int netfd;
- argv0 = argv[0];
- if (argc != 2)
- usage();
- atnotify(alarmhandler, 1);
- netfd = dial(argv[1], "net", 0, 0);
- if (netfd < 0)
- sysfatal("can't dial %s: %r", argv[1]);
- pass(0, netfd);
- exits(0);
- }
|