Blob
1 #include <u.h>2 #include <libc.h>3 #include <thread.h>4 #include <sunrpc.h>6 typedef struct Arg Arg;7 struct Arg8 {9 int fd;10 char adir[40];11 SunSrv *srv;12 };14 static void15 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 int37 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 int51 sunsrvannounce(SunSrv *srv, char *addr)52 {53 if(strstr(addr, "udp!"))54 return sunsrvudp(srv, addr);55 else56 return sunsrvnet(srv, addr);57 }