home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / vms / sockadapt.h < prev    next >
C/C++ Source or Header  |  2000-02-25  |  5KB  |  189 lines

  1. /*  sockadapt.h
  2.  *
  3.  *  Authors: Charles Bailey  bailey@newman.upenn.edu
  4.  *           David Denholm  denholm@conmat.phys.soton.ac.uk
  5.  *  Last Revised:  4-Mar-1997
  6.  *
  7.  *  This file should include any other header files and procide any
  8.  *  declarations, typedefs, and prototypes needed by perl for TCP/IP
  9.  *  operations.
  10.  *
  11.  *  This version is set up for perl5 with socketshr 0.9D TCP/IP support.
  12.  */
  13.  
  14. #ifndef __SOCKADAPT_INCLUDED
  15. #define __SOCKADAPT_INCLUDED 1
  16.  
  17. #if defined(DECCRTL_SOCKETS)
  18.     /* Use builtin socket interface in DECCRTL and
  19.      * UCX emulation in whatever TCP/IP stack is present.
  20.      * Provide prototypes for missing routines; stubs are
  21.      * in sockadapt.c.
  22.      */
  23. #  include <socket.h>
  24. #  include <inet.h>
  25. #  include <in.h>
  26. #  include <netdb.h>
  27. #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
  28. #else
  29.    void sethostent(int);
  30.    void endhostent(void);
  31.    void setnetent(int);
  32.    void endnetent(void);
  33.    void setprotoent(int);
  34.    void endprotoent(void);
  35.    void setservent(int);
  36.    void endservent(void);
  37. #endif
  38. #  if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 50200000) && !defined(Sock_size_t)
  39. #    define Sock_size_t unsigned int
  40. #  endif
  41.  
  42. #else
  43.     /* Pull in SOCKETSHR's header, and set up structures for
  44.      * gcc, whose basic header file set doesn't include the
  45.      * TCP/IP stuff.
  46.      */
  47.  
  48.  
  49. #ifdef __GNU_CC__
  50.  
  51. /* we may not have netdb.h etc, so lets just do this here  - div */
  52. /* no harm doing this for all .c files - needed only by pp_sys.c */
  53.  
  54. struct    hostent {
  55.     char    *h_name;    /* official name of host */
  56.     char    **h_aliases;    /* alias list */
  57.     int    h_addrtype;    /* host address type */
  58.     int    h_length;    /* length of address */
  59.     char    **h_addr_list;    /* address */
  60. };
  61. #ifdef h_addr
  62. #   undef h_addr
  63. #endif
  64. #define h_addr h_addr_list[0]
  65.  
  66. struct    protoent {
  67.     char    *p_name;    /* official protocol name */
  68.     char    **p_aliases;    /* alias list */
  69.     int    p_proto;    /* protocol # */
  70. };
  71.  
  72. struct    servent {
  73.     char    *s_name;    /* official service name */
  74.     char    **s_aliases;    /* alias list */
  75.     int    s_port;        /* port # */
  76.     char    *s_proto;    /* protocol to use */
  77. };
  78.  
  79. struct    in_addr {
  80.     unsigned long s_addr;
  81. };
  82.  
  83. struct    sockaddr {
  84.     unsigned short    sa_family;        /* address family */
  85.     char    sa_data[14];        /* up to 14 bytes of direct address */
  86. };
  87.  
  88. /*
  89.  * Socket address, internet style.
  90.  */
  91. struct sockaddr_in {
  92.     short    sin_family;
  93.     unsigned short    sin_port;
  94.     struct    in_addr sin_addr;
  95.     char    sin_zero[8];
  96. };
  97.  
  98. struct timeval {
  99.     long tv_sec;
  100.     long tv_usec;
  101. };
  102.  
  103. struct netent {
  104.     char *n_name;
  105.     char **n_aliases;
  106.     int n_addrtype;
  107.     long n_net;
  108. };
  109.  
  110. /* Since socketshr.h won't declare function prototypes unless it thinks
  111.  * the system headers have already been included, we convince it that
  112.  * this is the case.
  113.  */
  114.  
  115. #ifndef AF_INET
  116. #  define AF_INET 2
  117. #endif
  118. #ifndef IPPROTO_TCP
  119. #  define IPPROTO_TCP 6
  120. #endif
  121. #ifndef __INET_LOADED
  122. #  define __INET_LOADED
  123. #endif
  124. #ifndef __NETDB_LOADED
  125. #  define __NETDB_LOADED
  126. #endif
  127.  
  128. /* Finally, we provide prototypes for routines not supported by SocketShr,
  129.  * so that the stubs in sockadapt.c won't cause complaints about
  130.  * undeclared routines.
  131.  */
  132.  
  133. struct netent *getnetbyaddr( long net, int type);
  134. struct netent *getnetbyname( char *name);
  135. struct netent *getnetent();
  136. void setnetent(int);
  137. void endnetent();
  138.  
  139. #else /* !__GNU_CC__ */
  140.  
  141. /* DECC and VAXC have socket headers in the system set; they're for UCX, but
  142.  * we'll assume that the actual calling sequence is identical across the
  143.  * various TCP/IP stacks; these routines are pretty standard.
  144.  */
  145. #include <socket.h>
  146. #include <in.h>
  147. #include <inet.h>
  148.  
  149. /* SocketShr doesn't support these routines, but the DECC RTL contains
  150.  * stubs with these names, designed to be used with the UCX socket
  151.  * library.  We avoid linker collisions by substituting new names.
  152.  */
  153. #define getnetbyaddr no_getnetbyaddr
  154. #define getnetbyname no_getnetbyname
  155. #define getnetent    no_getnetent
  156. #define setnetent    no_setnetent
  157. #define endnetent    no_endnetent
  158.  
  159. #include <netdb.h>
  160. #endif
  161.  
  162. /* We don't have these two in the system headers. */
  163. void setnetent(int);
  164. void endnetent();
  165.  
  166. #include <socketshr.h>
  167. /* socketshr.h from SocketShr 0.9D doesn't alias fileno; its comments say
  168.  * that the CRTL version works OK.  This isn't the case, at least with
  169.  * VAXC, so we use the SocketShr version.
  170.  * N.B. This means that sockadapt.h must be included *after* stdio.h.
  171.  *      This is presently the case for Perl.
  172.  */
  173. #ifdef fileno
  174. #  undef fileno
  175. #endif
  176. #define fileno si_fileno
  177. int si_fileno(FILE *);
  178.  
  179.  
  180. /* Catch erroneous results for UDP sockets -- see sockadapt.c */
  181. #ifdef getpeername
  182. #  undef getpeername
  183. #endif
  184. #define getpeername my_getpeername
  185. int my_getpeername (int, struct sockaddr *, int *);
  186.  
  187. #endif /* SOCKETSHR stuff */
  188. #endif /* include guard */
  189.