blob: e8e56902edc7f8b48301a5888e4af4878e281a01 [file] [log] [blame]
rscb2ad2ef2005-01-04 22:30:59 +00001#include <u.h>
2#include <libc.h>
3
4void
5usage(void)
6{
7 fprint(2, "usage: dial [-e] addr\n");
8 exits("usage");
9}
10
11void
12killer(void *x, char *msg)
13{
14 USED(x);
15 if(strcmp(msg, "kill") == 0)
16 exits(0);
17 noted(NDFLT);
18}
19
20void
21main(int argc, char **argv)
22{
23 int fd, pid;
24 char buf[8192];
25 int n, waitforeof;
26
27 notify(killer);
28 waitforeof = 0;
29 ARGBEGIN{
30 case 'e':
31 waitforeof = 1;
32 break;
33 default:
34 usage();
35 }ARGEND
36
37 if(argc != 1)
38 usage();
39
40 if((fd = dial(argv[0], nil, nil, nil)) < 0)
41 sysfatal("dial: %r");
42
43 switch(pid = fork()){
44 case -1:
45 sysfatal("fork: %r");
46 case 0:
47 while((n = read(0, buf, sizeof buf)) > 0)
rsc9d597982005-02-11 16:42:48 +000048 if(write(fd, buf, n) < 0)
rscb2ad2ef2005-01-04 22:30:59 +000049 break;
50 if(!waitforeof)
51 postnote(PNPROC, getppid(), "kill");
52 exits(nil);
53 }
54
55 while((n = read(fd, buf, sizeof buf)) > 0)
56 if(write(1, buf, n) < 0)
57 break;
58
59 postnote(PNPROC, pid, "kill");
60 waitpid();
61 exits(0);
62}