home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume24 / lb / st_sendrecv.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-05  |  1.7 KB  |  99 lines

  1. #ifndef lint
  2. static char *RCSid = "$Header: /ecn1/src/ecn/statsrv/RCS/st_sendrecv.c,v 1.2 87/10/19 08:37:02 davy Exp $";
  3. #endif
  4. /*
  5.  * st_sendrecv.c - stream send/recv functions
  6.  *
  7.  * David A. Curry
  8.  * Purdue University
  9.  * Engineering Computer Network
  10.  * davy@riacs.edu (previously davy@intrepid.ecn.purdue.edu)
  11.  * October, 1987
  12.  *
  13.  * $Log:    st_sendrecv.c,v $
  14.  * Revision 1.2  87/10/19  08:37:02  davy
  15.  * Fixed to catch end of file on socket.
  16.  * 
  17.  * Revision 1.1  87/10/17  21:01:46  davy
  18.  * Initial revision
  19.  * 
  20.  */
  21. #include <sys/param.h>
  22. #include <sys/socket.h>
  23. #include <netinet/in.h>
  24. #include <syslog.h>
  25. #include <stdio.h>
  26.  
  27. #include "stats.h"
  28.  
  29. extern char    *pname;
  30. extern short    server;
  31.  
  32. /*
  33.  * st_send - send buf on the socket s.
  34.  */
  35. st_send(s, buf)
  36. char *buf;
  37. int s;
  38. {
  39.     register int cnt;
  40.  
  41.     /*
  42.      * We want the length including the null.
  43.      */
  44.     cnt = strlen(buf) + 1;
  45.  
  46.     /*
  47.      * Send the buffer.
  48.      */
  49.     if (send(s, buf, cnt, 0) < 0) {
  50.         if (server)
  51.             syslog(LOG_ERR, "send: %m");
  52.         else
  53.             error("send");
  54.         exit(1);
  55.     }
  56. }
  57.  
  58. /*
  59.  * st_recv - receive data of maximum length cnt into the buffer buf on
  60.  *         socket s.  err describes what we're expecting for the error
  61.  *         message.
  62.  */
  63. st_recv(s, buf, cnt, err)
  64. char *buf, *err;
  65. int s, cnt;
  66. {
  67.     char c;
  68.     register int n;
  69.  
  70.     /*
  71.      * Receive a character at a time up to a null.
  72.      */
  73.     do {
  74.         if ((n = recv(s, &c, sizeof(char), 0)) < 0) {
  75.             if (server)
  76.                 syslog(LOG_ERR, "recv: %m");
  77.             else
  78.                 error("recv");
  79.             exit(1);
  80.         }
  81.  
  82.         /*
  83.          * End of file.
  84.          */
  85.         if (n == 0)
  86.             exit(0);
  87.  
  88.         if (--cnt < 0) {
  89.             if (server)
  90.                 syslog(LOG_ERR, "%s too long", err);
  91.             else
  92.                 fprintf(stderr, "%s: %s too long.\n", pname, err);
  93.             exit(1);
  94.         }
  95.  
  96.         *buf++ = c;
  97.     } while (c != '\0');
  98. }
  99.