Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <thread.h>
4 #include <sunrpc.h>
6 typedef struct Arg Arg;
7 struct Arg
8 {
9 int fd;
10 char adir[40];
11 SunSrv *srv;
12 };
14 static void
15 sunnetlisten(void *v)
16 {
17 int fd, lcfd;
18 char ldir[40];
19 Arg *a = v;
21 for(;;){
22 lcfd = listen(a->adir, ldir);
23 if(lcfd < 0)
24 break;
25 fd = accept(lcfd, ldir);
26 close(lcfd);
27 if(fd < 0)
28 continue;
29 if(!sunsrvfd(a->srv, fd))
30 close(fd);
31 }
32 free(a);
33 close(a->fd);
34 }
36 int
37 sunsrvnet(SunSrv *srv, char *addr)
38 {
39 Arg *a;
41 a = emalloc(sizeof(Arg));
42 if((a->fd = announce(addr, a->adir)) < 0)
43 return -1;
44 a->srv = srv;
46 proccreate(sunnetlisten, a, SunStackSize);
47 return 0;
48 }
50 int
51 sunsrvannounce(SunSrv *srv, char *addr)
52 {
53 if(strstr(addr, "udp!"))
54 return sunsrvudp(srv, addr);
55 else
56 return sunsrvnet(srv, addr);
57 }