#include #include #include char* remoteaddr(char *dir) { static char buf[128]; char *p; int n, fd; snprint(buf, sizeof buf, "%s/remote", dir); fd = open(buf, OREAD); if(fd < 0) return ""; n = read(fd, buf, sizeof(buf)); close(fd); if(n > 0){ buf[n] = 0; p = strchr(buf, '!'); if(p) *p = 0; return buf; } return ""; } void main(void) { char buf[512], dir[40], ndir[40]; int n, ctl, nctl, fd; if((ctl = announce("udp!*!8001", dir)) == -1) sysfatal("announce: %r"); nctl = listen(dir, ndir); if(nctl < 0) sysfatal("listen %r"); fd = accept(nctl, ndir); if(fd < 0) sysfatal("accept: can't open %s/data: %r", ndir); fprint(2, "incoming call from %s in %s\n", remoteaddr(ndir), ndir); if((n = read(fd, buf, sizeof buf)) == -1) sysfatal("read: %r"); fprint(2, "read [%.*s]\n", n, buf); if(write(fd, buf, n) != n) sysfatal("read: %r"); close(ctl); close(nctl); exits(0); }