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

操作系统开发

开发平台:

DOS

  1. /*
  2.  * This implements the classic (outdated) FINGER protocol
  3.  * While the protocol has grown to be more complex, this gives a
  4.  * simplified example which can be queried by any FINGER client.
  5.  *
  6.  * We listen on port 79.  For each new connection we accept a line
  7.  * of input.  That line is either a user name, or a blank line meaning
  8.  * we should list everyone.
  9.  *
  10.  */
  11. #include <rtos.h>
  12. #include <net.h>
  13. #include <stdio.h>
  14. /*
  15.  * heartbeat - just thumps periodically and does network stuff
  16.  */
  17. void heartbeat( DWORD param )
  18. {
  19.     do {
  20.         tcp_tick( NULL );
  21.         rt_sleep( 100 );    /* every 100 ms we do another network tick */
  22.     } while ( 1 );
  23. }
  24. #define FINGERPORT 79
  25. #define MAXFINGERD 5
  26. tcp_Socket *fing;
  27. /*
  28.  * implement ONE finger server
  29.  */
  30. void fingerd( DWORD index )
  31. {
  32.     tcp_Socket *s;
  33.     char buffer[ 128 ];
  34.     s = &fing[ index ];
  35.     do {
  36.         /* start listenning */
  37.         tcp_listen( s, FINGERPORT, 0, 0, NULL, 0 );
  38.         /* wait for a connection */
  39.         do {
  40.             rt_sleep( 100 );    /* just waiting */
  41.             if ( tcp_tick( s ) == NULL ) goto reopen;
  42.         } while ( ! sock_established( s ));
  43.         /* get a line of text */
  44.         sock_mode( s, TCP_MODE_ASCII );
  45.         while ( ! sock_dataready( s )) {
  46.             rt_yield();
  47.             if ( tcp_tick( s ) == NULL ) goto reopen;
  48.         }
  49.         sock_gets( s, buffer, sizeof( buffer ));
  50.         rip( buffer );   /* remove CR/LF */
  51.         /* output the results */
  52.         sock_puts( s, "thanks for asking about ");
  53.         sock_puts( s, buffer );
  54. reopen:
  55.         sock_close( s );
  56.         /*
  57.          * and wait for it to close
  58.          */
  59.         while ( tcp_tick( s ) )
  60.             rt_sleep( 100 );
  61.         /* now we are unthreaded */
  62.     } while ( 1 );
  63. }
  64. main()
  65. {
  66.     int i;
  67.     kpreemptive = 1;
  68.     kdebug = 1;
  69.     rt_init(100);
  70.     sock_init();
  71.     cputs("starting...rn");
  72.     fing = kcalloc( sizeof( tcp_Socket ), MAXFINGERD );
  73.     rt_newthread( heartbeat, 1,2048, 0, "heartbeat" );
  74.     for ( i = 0 ; i < MAXFINGERD ; ++i )
  75.         rt_newthread( fingerd, i, 2048, 0, "fingerd worker" );
  76.     do {
  77.         /* nothing */
  78.         rt_yield();
  79.     } while ( 1 );
  80. }