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

TCP/IP协议栈

开发平台:

DOS

  1. /******************************************************************************
  2.     DAYTIME - read and print time of day string from internet
  3.     Copyright (C) 1991 Erick Engelke
  4.     Portions Copyright (C) 1990, National Center for Supercomputer Applications
  5.     This program is free software; you can redistribute it and/or modify
  6.     it, but you may not sell it.
  7.     This program is distributed in the hope that it will be useful,
  8.     but without any warranty; without even the implied warranty of
  9.     merchantability or fitness for a particular purpose.
  10.         Erick Engelke                   or via E-Mail
  11.         Faculty of Engineering
  12.         University of Waterloo          Erick@development.watstar.uwaterloo.ca
  13.         200 University Ave.,
  14.         Waterloo, Ont., Canada
  15.         N2L 3G1
  16.     Returns:
  17.         0   - success
  18.         2   - some failure in the connection (port unavailable,
  19.                 no response, etc.)
  20.         3   - unable to reach it - local host or first router is down
  21. ******************************************************************************/
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <tcp.h>
  25. #define DAYTIME_PORT 13
  26. int daytime(longword host)
  27. {
  28. #ifdef TCP_DAYTIME
  29.     static tcp_Socket sock;
  30.     tcp_Socket *s;
  31. #else
  32.     static udp_Socket sock;
  33.     udp_Socket *s;
  34. #endif
  35.     char buffer[ 513 ];
  36.     int retcode = 3;
  37.     int status;
  38.     int udpretries = 3;
  39.     long udpretrytime;
  40. /*    int len; */
  41.     s = &sock;
  42.     status = 0;
  43. #ifdef TCP_DAYTIME
  44.     if (!tcp_open( s, 0, host, DAYTIME_PORT, NULL )) {
  45. puts("Sorry, unable to connect to that machine right now!");
  46.         return( 3 );
  47.     }
  48.     printf("waiting...r");
  49.     sock_wait_established(s, sock_delay , NULL, &status);
  50.     printf("connected n");
  51. #else
  52.     if (!udp_open( s, 0, host, DAYTIME_PORT, NULL )) {
  53. puts("Sorry, unable to connect to that machine right now!");
  54.         return( 3 );
  55.     }
  56.     sock_write( s, "n", 1 );
  57.     udpretrytime = set_timeout( 2 );
  58. #endif TCP_DAYTIME
  59.     while ( 1 ) {
  60.         sock_tick( s, &status );
  61. #ifndef TCP_DAYTIME
  62.         if ( chk_timeout( udpretrytime )) {
  63.             if ( udpretries-- == 0 ) break;
  64.             udpretrytime = set_timeout( 2 );
  65.             sock_write( s, "n", 1 );
  66.         }
  67. #endif
  68. if (sock_dataready( s ) ) {
  69.     sock_gets( s, buffer, sizeof( buffer ));
  70.     puts( buffer );
  71.             retcode = 0;
  72.     break;
  73. }
  74.     }
  75.     sock_close( s );
  76.     sock_wait_closed( s, sock_delay, NULL, &status );
  77.     return(0);
  78.     
  79. sock_err:
  80.     switch (status) {
  81. case 1 : /* foreign host closed */
  82.                  return(retcode);
  83. case -1: /* timeout */
  84.  printf("nConnection timed out!");
  85.                  return(2);
  86. default: printf("Aborting");
  87.                  return(2);
  88.     }
  89. }
  90. int main(int argc, char **argv )
  91. {
  92.     int status;
  93.     longword host;
  94.     if (argc != 2) {
  95. puts("   DAYTIME server");
  96. exit( 3 );
  97.     }
  98.     sock_init();
  99.     if ( (host = resolve( argv[1])) != 0uL )
  100. status = daytime( host );
  101.     else {
  102. printf("Could not resolve host '%s'n", argv[1]);
  103. status = 3;
  104.     }
  105.     exit( status );
  106.     return (0);  /* not reached */
  107. }