home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tests / benchmarks / udgself.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-05-06  |  1.3 KB  |  71 lines

  1. /*
  2.  * IPC benchmark,
  3.  * write and discard to self using pipes.
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <signal.h>
  8.  
  9. #include <sys/types.h>
  10. #include <sys/socket.h>
  11. #include <sys/time.h>
  12. #include <sys/un.h>
  13. #include <sys/resource.h>
  14.  
  15. struct    sockaddr_un sun;
  16. struct    sockaddr_un myname;
  17.  
  18. int    catchsig();
  19. char    *malloc();
  20.  
  21. main(argc, argv)
  22.     char *argv[];
  23. {
  24.     register char *buf;
  25.     register int i, msgs = 0;
  26.     int msglen = 0, ms;
  27.     int pid, s, sunlen;
  28.  
  29.     if (argc < 3) {
  30.         printf("usage: %s #msgs msglen\n", argv[0]);
  31.         exit(1);
  32.     }
  33.     msgs = atoi(argv[1]);
  34.     msglen = atoi(argv[2]);
  35.     buf = malloc(msglen);
  36.     if (buf == 0) {
  37.         printf("Couldn't allocate data buffer\n");
  38.         exit(1);
  39.     }
  40.     myname.sun_family = AF_UNIX;
  41.     signal(SIGINT, catchsig);
  42.     s = socket(AF_UNIX, SOCK_DGRAM, 0);
  43.     if (s < 0) {
  44.         perror("socket");
  45.         exit(1);
  46.     }
  47.     sprintf(myname.sun_path, "unixdg%d", getpid());
  48.     sunlen = strlen(myname.sun_path) + 2;
  49.     if (bind(s, &myname, sunlen) < 0) {
  50.         perror("bind");
  51.         exit(1);
  52.     }
  53.     for (i = 0; i < msgs; i++) {
  54.         sunlen = strlen(myname.sun_path) + 2;
  55.         if (sendto(s, buf, msglen, 0, &myname, sunlen) < 0)
  56.             perror("sendto (parent)");
  57.         if (recvfrom(s, buf, msglen, 0, &sun, &sunlen) < 0)
  58.             perror("recvfrom (parent)");
  59.     }
  60.     close(s);
  61.     unlink(myname.sun_path);
  62. }
  63.  
  64. catchsig(s)
  65.     int s;
  66. {
  67.  
  68.     unlink(myname.sun_path);
  69.     exit(1);
  70. }
  71.