1 551445b9 2004-04-21 devnull #include <u.h>
2 551445b9 2004-04-21 devnull #include <libc.h>
3 551445b9 2004-04-21 devnull #include <thread.h>
4 551445b9 2004-04-21 devnull #include <sunrpc.h>
6 551445b9 2004-04-21 devnull typedef struct Arg Arg;
7 551445b9 2004-04-21 devnull struct Arg
10 551445b9 2004-04-21 devnull char adir[40];
11 551445b9 2004-04-21 devnull SunSrv *srv;
14 551445b9 2004-04-21 devnull static void
15 551445b9 2004-04-21 devnull sunnetlisten(void *v)
17 551445b9 2004-04-21 devnull int fd, lcfd;
18 551445b9 2004-04-21 devnull char ldir[40];
19 551445b9 2004-04-21 devnull Arg *a = v;
22 551445b9 2004-04-21 devnull lcfd = listen(a->adir, ldir);
23 551445b9 2004-04-21 devnull if(lcfd < 0)
25 551445b9 2004-04-21 devnull fd = accept(lcfd, ldir);
26 551445b9 2004-04-21 devnull close(lcfd);
27 551445b9 2004-04-21 devnull if(fd < 0)
28 551445b9 2004-04-21 devnull continue;
29 551445b9 2004-04-21 devnull if(!sunsrvfd(a->srv, fd))
30 551445b9 2004-04-21 devnull close(fd);
33 551445b9 2004-04-21 devnull close(a->fd);
37 551445b9 2004-04-21 devnull sunsrvnet(SunSrv *srv, char *addr)
41 551445b9 2004-04-21 devnull a = emalloc(sizeof(Arg));
42 551445b9 2004-04-21 devnull if((a->fd = announce(addr, a->adir)) < 0)
43 551445b9 2004-04-21 devnull return -1;
44 551445b9 2004-04-21 devnull a->srv = srv;
46 551445b9 2004-04-21 devnull proccreate(sunnetlisten, a, SunStackSize);
47 551445b9 2004-04-21 devnull return 0;
51 551445b9 2004-04-21 devnull sunsrvannounce(SunSrv *srv, char *addr)
53 551445b9 2004-04-21 devnull if(strstr(addr, "udp!"))
54 551445b9 2004-04-21 devnull return sunsrvudp(srv, addr);
56 551445b9 2004-04-21 devnull return sunsrvnet(srv, addr);