udpecho.c 789 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <ip.h>
  4. void
  5. usage(void)
  6. {
  7. fprint(2, "usage: %s [-x netmtpt]\n", argv0);
  8. exits("usage");
  9. }
  10. void
  11. main(int argc, char **argv)
  12. {
  13. int fd, cfd, n;
  14. char buf[4096], data[128], devdir[40], net[32];
  15. setnetmtpt(net, sizeof net, nil);
  16. ARGBEGIN{
  17. case 'x':
  18. setnetmtpt(net, sizeof net, EARGF(usage()));
  19. break;
  20. }ARGEND;
  21. sprint(data, "%s/udp!*!echo", net);
  22. cfd = announce(data, devdir);
  23. if(cfd < 0)
  24. sysfatal("can't announce %s: %r", data);
  25. if(fprint(cfd, "headers") < 0)
  26. sysfatal("can't set header mode: %r");
  27. sprint(data, "%s/data", devdir);
  28. fd = open(data, ORDWR);
  29. if(fd < 0)
  30. sysfatal("open %s: %r", data);
  31. while ((n = read(fd, buf, sizeof buf)) > 0)
  32. write(fd, buf, n);
  33. if (n < 0)
  34. sysfatal("error reading: %r");
  35. exits(0);
  36. }