]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libsunrpc/net.c
audio/flacenc
[plan9front.git] / sys / src / libsunrpc / net.c
1 #include <u.h>
2 #include <libc.h>
3 #include <thread.h>
4 #include <sunrpc.h>
5
6 typedef struct Arg Arg;
7 struct Arg
8 {
9         int fd;
10         char adir[40];
11         SunSrv *srv;
12 };
13
14 static void
15 sunNetListen(void *v)
16 {
17         int fd, lcfd;
18         char ldir[40];
19         Arg *a = v;
20
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 }
35
36 int
37 sunSrvNet(SunSrv *srv, char *addr)
38 {
39         Arg *a;
40
41         a = emalloc(sizeof(Arg));
42         if((a->fd = announce(addr, a->adir)) < 0)
43                 return -1;
44         a->srv = srv;
45
46         proccreate(sunNetListen, a, SunStackSize);
47         return 0;
48 }
49
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 }