sv_funcs.c
上传用户:wei_4586
上传日期:2008-05-28
资源大小:18k
文件大小:2k
源码类别:

网络

开发平台:

Unix_Linux

  1. /* sv_funcs.c - TCPechod, TCPchargend, TCPdaytimed, TCPtimed */
  2. #include <sys/types.h>
  3. #include <unistd.h>
  4. #include <stdio.h>
  5. #include <time.h>
  6. #include <string.h>
  7. #define BUFFERSIZE 4096 /* max read buffer size */
  8. extern int errno;
  9. void TCPechod(int), TCPchargend(int), TCPdaytimed(int), TCPtimed(int);
  10. int errexit(const char *format, ...);
  11. /*------------------------------------------------------------------------
  12.  * TCPecho - do TCP ECHO on the given socket
  13.  *------------------------------------------------------------------------
  14.  */
  15. void
  16. TCPechod(int fd)
  17. {
  18. char buf[BUFFERSIZE];
  19. int cc;
  20. while (cc = read(fd, buf, sizeof buf)) {
  21. if (cc < 0)
  22. errexit("echo read: %sn", strerror(errno));
  23. if (write(fd, buf, cc) < 0)
  24. errexit("echo write: %sn", strerror(errno));
  25. }
  26. }
  27. #define LINELEN 72
  28. /*------------------------------------------------------------------------
  29.  * TCPchargend - do TCP CHARGEN on the given socket
  30.  *------------------------------------------------------------------------
  31.  */
  32. void
  33. TCPchargend(int fd)
  34. {
  35. char c, buf[LINELEN+2]; /* print LINELEN chars + rn */
  36. c = ' ';
  37. buf[LINELEN] = 'r';
  38. buf[LINELEN+1] = 'n';
  39. while (1) {
  40. int i;
  41. for (i=0; i<LINELEN; ++i) {
  42. buf[i] = c++;
  43. if (c > '~')
  44. c = ' ';
  45. }
  46. if (write(fd, buf, LINELEN+2) < 0)
  47. break;
  48. }
  49. }
  50. /*------------------------------------------------------------------------
  51.  * TCPdaytimed - do TCP DAYTIME protocol
  52.  *------------------------------------------------------------------------
  53.  */
  54. void
  55. TCPdaytimed(int fd)
  56. {
  57. char buf[LINELEN], *ctime();
  58. time_t now;
  59. (void) time(&now);
  60. sprintf(buf, "%s", ctime(&now));
  61. (void) write(fd, buf, strlen(buf));
  62. }
  63. #define UNIXEPOCH 2208988800UL /* UNIX epoch, in UCT secs */
  64. /*------------------------------------------------------------------------
  65.  * TCPtimed - do TCP TIME protocol
  66.  *------------------------------------------------------------------------
  67.  */
  68. void
  69. TCPtimed(int fd)
  70. {
  71. time_t now;
  72. (void) time(&now);
  73. now = htonl((unsigned long)(now + UNIXEPOCH));
  74. (void) write(fd, (char *)&now, sizeof(now));
  75. }