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

TCP/IP协议栈

开发平台:

DOS

  1. #include <copyright.h>
  2. #include <stdio.h>
  3. #include <wattcp.h>
  4. #include <stdlib.h>    /* itoa */
  5. #include <string.h>
  6. #include <elib.h>
  7. /*
  8.  * PCBSD - provide some typical BSD UNIX functionality
  9.  * Erick Engelke, Feb 22, 1991
  10.  */
  11. /*
  12.  * chk_socket - determine whether a real socket or not
  13.  *
  14.  */
  15. int _chk_socket( sock_type *s )
  16. {
  17.     if ( s->tcp.ip_type == TCP_PROTO ) {
  18. if ( s->tcp.state <= tcp_StateCLOSED) /* skips invalid data */
  19.     return( 2 );
  20.     }
  21.     if ( s->udp.ip_type == UDP_PROTO ) return( 1 );
  22.     return( 0 );
  23. }
  24. char *inet_ntoa( char *s, longword x )
  25. {
  26.     itoa( (int) (x >> 24), s, 10 );
  27.     strcat( s, ".");
  28.     itoa( (int) (x >> 16) & 0xff, strchr( s, 0), 10);
  29.     strcat( s, ".");
  30.     itoa( (int) (x >> 8) & 0xff, strchr( s, 0), 10);
  31.     strcat( s, ".");
  32.     itoa( (int) (x) & 0xff, strchr( s, 0), 10);
  33.     return( s );
  34. }
  35. longword inet_addr( char *s )
  36. {
  37.     return( isaddr( s ) ? aton( s ) : 0 );
  38. }
  39. char *sockerr( sock_type *s )
  40. {
  41.     if ( strlen( s->tcp.err_msg ) < 80 )
  42. return( s->tcp.err_msg );
  43.     return( NULL );
  44. }
  45. #ifdef NOTUSED // S. Lawson - not even close anymore!
  46. static char *sock_states[] = {
  47.     "Listen","SynSent","SynRec","Established","FinWt1","FinWt2","ClosWt","LastAck"
  48.     "TmWt","Closed"};
  49. #else
  50. static char *sock_states[] = {
  51.     "Listen","SynSent","SynRcvd","Established","EstClosing","FinWait1",
  52.     "FinWait2","CloseWait","Closing","LastAck","TimeWait","CloseMSL",
  53.     "Closed"};
  54. #endif
  55. char *sockstate( sock_type *s )
  56. {
  57.     switch ( _chk_socket( s )) {
  58.        case  1 : return( "UDP Socket" );
  59.        case  2 : return( sock_states[ s->tcp.state ] );
  60.        default : return( "Not an active socket");
  61.     }
  62. }
  63. longword gethostid(void)
  64. {
  65.     return( my_ip_addr );
  66. }
  67. longword sethostid( longword ip )
  68. {
  69.     return( my_ip_addr = ip );
  70. }
  71. word ntohs( word a )
  72. {
  73.     return( intel16(a) );
  74. }
  75. word htons( word a )
  76. {
  77.     return( intel16(a) );
  78. }
  79. longword ntohl( longword x )
  80. {
  81.     return( intel( x ));
  82. }
  83. longword htonl( longword x )
  84. {
  85.     return( intel( x ));
  86. }