11 fprint(2, "usage: listen1 [-tv] address cmd args...\n");
20 fd = open("#c/user", OWRITE);
21 if(fd < 0 || write(fd, "none", strlen("none")) < 0)
22 sysfatal("can't become none: %r");
24 if(newns("none", nil) < 0)
25 sysfatal("can't build namespace: %r");
35 snprint(buf, sizeof buf, "%s/remote", dir);
36 fd = open(buf, OREAD);
39 n = read(fd, buf, sizeof(buf));
52 main(int argc, char **argv)
54 char data[60], dir[40], ndir[40];
73 fd = open("/dev/null", OWRITE);
83 print("listen started\n");
84 ctl = announce(argv[0], dir);
86 sysfatal("announce %s: %r", argv[0]);
89 nctl = listen(dir, ndir);
91 sysfatal("listen %s: %r", argv[0]);
93 switch(rfork(RFFDG|RFPROC|RFNOWAIT|RFENVG|RFNAMEG|RFNOTEG)){
95 reject(nctl, ndir, "host overloaded");
99 fd = accept(nctl, ndir);
101 fprint(2, "accept %s: can't open %s/data: %r\n",
105 print("incoming call for %s from %s in %s\n", argv[0],
106 remoteaddr(ndir), ndir);
107 fprint(nctl, "keepalive");
111 snprint(data, sizeof data, "%s/data", ndir);
112 bind(data, "/dev/cons", MREPL);
117 exec(argv[1], argv+1);
118 if(argv[1][0] != '/')
119 exec(smprint("/bin/%s", argv[1]), argv+1);
120 fprint(2, "%s: exec: %r\n", argv0);