udpecho.c 855 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 data[128];
  15. char devdir[40];
  16. char buf[4096];
  17. char net[32];
  18. char *p;
  19. setnetmtpt(net, sizeof(net), nil);
  20. ARGBEGIN{
  21. case 'x':
  22. p = ARGF();
  23. if(p == nil)
  24. usage();
  25. setnetmtpt(net, sizeof(net), p);
  26. break;
  27. }ARGEND;
  28. sprint(data, "%s/udp!*!echo", net);
  29. cfd = announce(data, devdir);
  30. if(cfd < 0)
  31. sysfatal("can't announce: %r");
  32. if(fprint(cfd, "headers") < 0)
  33. sysfatal("can't set header mode: %r");
  34. fprint(cfd, "oldheaders");
  35. sprint(data, "%s/data", devdir);
  36. fd = open(data, ORDWR);
  37. if(fd < 0)
  38. sysfatal("open udp data");
  39. for(;;){
  40. n = read(fd, buf, sizeof(buf));
  41. if(n < 0)
  42. sysfatal("error reading: %r");
  43. write(fd, buf, n);
  44. }
  45. }