COOKIE.C
上传用户:better800
上传日期:2022-06-13
资源大小:1853k
文件大小:2k
源码类别:

TCP/IP协议栈

开发平台:

DOS

  1. /******************************************************************************
  2.     COOKIE - read and print a witty saying from internet
  3.     By: Jim Martin                      Internet: jim@dorm.rutgers.edu
  4.         Dormitory Networking Project    UUCP: {backbone}!rutgers!jim
  5.         Rutgers University              Phone: (908) 932-3719
  6.     Uses the WATTCP kernal.
  7. ******************************************************************************/
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <tcp.h>
  11. #define COOKIE_PORT 17
  12. int cookie( longword host )
  13. {
  14. static udp_Socket sock;
  15.      udp_Socket *s;
  16.      char buffer[ 2049 ];
  17.      int status;
  18. int i;
  19. int fortunelen;
  20.      s = &sock;
  21.      status = 0;
  22. if ( host != 0 )
  23. {
  24. status=udp_open( s, 0, host, COOKIE_PORT, NULL );
  25. }
  26. else
  27. {
  28. if (_last_cookie == 0)
  29. {
  30. puts("Sorry, I can't seem to remember where my cookie jars are. ");
  31. puts("Could you tell me where one is? (Hint: host on the comand line)");
  32. exit(3);
  33. }
  34. for (i=0; i < _last_cookie; i++)
  35. {
  36. if ( (status=udp_open( s, 0, _cookie[i], COOKIE_PORT, NULL )) != 0 )
  37. {
  38. break;
  39. }
  40. }
  41. }
  42. if ( status == 0 )
  43. {
  44. puts("None of the cookie jars are open!");
  45. return( 1 );
  46. }
  47. sock_write( s, "n", 1 );
  48.      while ( 1 )
  49. {
  50. sock_tick( s, &status );
  51. if (sock_dataready( s ) )
  52. {
  53. fortunelen=sock_fastread( s, buffer, sizeof( buffer ));
  54. buffer[fortunelen]='';
  55. printf("%sn", buffer);
  56. sock_close(s);
  57. return(0);
  58. }
  59.      }
  60. sock_err:
  61.     switch (status)
  62. {
  63. case 1 : /* foreign host closed */
  64.  return(0);
  65. case -1: /* timeout */
  66.  printf("nConnection timed out!");
  67.              printf("ERROR: %snr", sockerr( s ));
  68.  return(1);
  69.      }
  70.         return (0);
  71. }
  72. int main(int argc, char **argv )
  73. {
  74. int status;
  75. longword host;
  76. if (argc > 2)
  77. {
  78. puts("Quote of the Day (Cookie) - retrieves a witty message");
  79. puts("Usage: COOKIE [server]");
  80. exit( 3 );
  81. }
  82. sock_init();
  83. if ( argc == 1)
  84. {
  85. status = cookie ((longword) NULL);
  86. }
  87. else
  88. {
  89. if ( (host = resolve( argv[1])) != 0uL )
  90. {
  91. status = cookie( host );
  92. }
  93. else
  94. {
  95. printf("Could not resolve host '%s'n", argv[1]);
  96. status = 3;
  97. }
  98. }
  99. exit( status );
  100.         return (0);  /* not reached */
  101. }