home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / header45.zip / stack16 / sys / socket.h < prev    next >
C/C++ Source or Header  |  1999-05-11  |  10KB  |  272 lines

  1. #ifndef __SOCKET_32H
  2. #define __SOCKET_32H
  3.  
  4. #include <types.h>
  5.  
  6. /*
  7.  * Copyright (c) 1982, 1985, 1986 Regents of the University of California.
  8.  * All rights reserved.
  9.  *
  10.  * Redistribution and use in source and binary forms are permitted
  11.  * provided that this notice is preserved and that due credit is given
  12.  * to the University of California at Berkeley. The name of the University
  13.  * may not be used to endorse or promote products derived from this
  14.  * software without specific prior written permission. This software
  15.  * is provided ``as is'' without express or implied warranty.
  16.  *
  17.  *      @(#)socket.h    7.2 (Berkeley) 12/30/87
  18.  */
  19.  
  20. /*
  21. ** Check for BORLAND Compiler
  22. */
  23. #ifdef __BORLANDC__                  /* DRC01 - BORLAND? */
  24. #ifndef _System                      /* DRC01 */
  25. #define _System _syscall             /* DRC01 - redefine _System to _syscall */
  26. #endif                               /* DRC01 */
  27. #endif                               /* DRC01 */
  28.  
  29. #ifdef __HIGHC__                     /* DRC02 - changed _System */
  30. #define _System                      /* DRC02 */
  31. #endif                               /* DRC02 */
  32.  
  33. /*
  34.  * Definitions related to sockets: types, address families, options.
  35.  */
  36.  
  37. /*
  38.  * Types
  39.  */
  40. #define SOCK_STREAM     1               /* stream socket */
  41. #define SOCK_DGRAM      2               /* datagram socket */
  42. #define SOCK_RAW        3               /* raw-protocol interface */
  43. #define SOCK_RDM        4               /* reliably-delivered message */
  44. #define SOCK_SEQPACKET  5               /* sequenced packet stream */
  45.  
  46. /*
  47.  * Option flags per-socket.
  48.  */
  49. #define SO_DEBUG        0x0001          /* turn on debugging info recording */
  50. #define SO_ACCEPTCONN   0x0002          /* socket has had listen() */
  51. #define SO_REUSEADDR    0x0004          /* allow local address reuse */
  52. #define SO_KEEPALIVE    0x0008          /* keep connections alive */
  53. #define SO_DONTROUTE    0x0010          /* just use interface addresses */
  54. #define SO_BROADCAST    0x0020          /* permit sending of broadcast msgs */
  55. #define SO_USELOOPBACK  0x0040          /* bypass hardware when possible */
  56. #define SO_LINGER       0x0080          /* linger on close if data present */
  57. #define SO_OOBINLINE    0x0100          /* leave received OOB data in line */
  58. #define SO_L_BROADCAST  0x0200          /* limited broadcast sent on all IFs*/
  59. #define SO_RCV_SHUTDOWN 0x0400          /* set if shut down called for rcv */
  60. #define SO_SND_SHUTDOWN 0x0800          /* set if shutdown called for send */
  61.  
  62. /*
  63.  * Additional options, not kept in so_options.
  64.  */
  65. #define SO_SNDBUF       0x1001          /* send buffer size */
  66. #define SO_RCVBUF       0x1002          /* receive buffer size */
  67. #define SO_SNDLOWAT     0x1003          /* send low-water mark */
  68. #define SO_RCVLOWAT     0x1004          /* receive low-water mark */
  69. #define SO_ERROR        0x1007          /* get error status and clear */
  70. #define SO_TYPE         0x1008          /* get socket type */
  71. #define SO_OPTIONS      0x1010          /* get socket options */
  72.  
  73. /*
  74.  * Structure used for manipulating linger option.
  75.  */
  76. struct  linger {
  77.       int     l_onoff;                /* option on/off */
  78.       int     l_linger;               /* linger time */
  79. };
  80.  
  81. /*
  82.  * Level number for (get/set)sockopt() to apply to socket itself.
  83.  */
  84. #define SOL_SOCKET      0xffff          /* options for socket level */
  85.  
  86. /*
  87.  * Address families.
  88.  */
  89. #define AF_UNSPEC       0               /* unspecified */
  90. #define AF_UNIX         1               /* local to host (pipes, portals) */
  91. #define AF_INET         2               /* internetwork: UDP, TCP, etc. */
  92. #define AF_IMPLINK      3               /* arpanet imp addresses */
  93. #define AF_PUP          4               /* pup protocols: e.g. BSP */
  94. #define AF_CHAOS        5               /* mit CHAOS protocols */
  95. #define AF_NS           6               /* XEROX NS protocols */
  96. #define AF_NBS          7               /* nbs protocols */
  97. #define AF_ECMA         8               /* european computer manufacturers */
  98. #define AF_DATAKIT      9               /* datakit protocols */
  99. #define AF_CCITT        10              /* CCITT protocols, X.25 etc */
  100. #define AF_SNA          11              /* IBM SNA */
  101. #define AF_DECnet       12              /* DECnet */
  102. #define AF_DLI          13              /* Direct data link interface */
  103. #define AF_LAT          14              /* LAT */
  104. #define AF_HYLINK       15              /* NSC Hyperchannel */
  105. #define AF_APPLETALK    16              /* Apple Talk */
  106.  
  107. #define AF_OS2          AF_UNIX
  108.  
  109. #define AF_NB           17              /* Netbios */
  110. #define AF_NETBIOS      AF_NB
  111.  
  112. #define AF_MAX          18
  113.  
  114.  
  115. /*
  116.  * Structure used by kernel to store most
  117.  * addresses.
  118.  */
  119. struct sockaddr {
  120.         unsigned short sa_family;       /* address family */
  121.       char    sa_data[14];            /* up to 14 bytes of direct address */
  122. };
  123.  
  124. /*
  125.  * Structure used by kernel to pass protocol
  126.  * information in raw sockets.
  127.  */
  128. struct sockproto {
  129.         unsigned short sp_family;              /* address family */
  130.         unsigned short sp_protocol;            /* protocol */
  131. };
  132.  
  133. /*
  134.  * Protocol families, same as address families for now.
  135.  */
  136. #define PF_UNSPEC       AF_UNSPEC
  137. #define PF_UNIX         AF_UNIX
  138. #define PF_INET         AF_INET
  139. #define PF_IMPLINK      AF_IMPLINK
  140. #define PF_PUP          AF_PUP
  141. #define PF_CHAOS        AF_CHAOS
  142. #define PF_NS           AF_NS
  143. #define PF_NBS          AF_NBS
  144. #define PF_ECMA         AF_ECMA
  145. #define PF_DATAKIT      AF_DATAKIT
  146. #define PF_CCITT        AF_CCITT
  147. #define PF_SNA          AF_SNA
  148. #define PF_DECnet       AF_DECnet
  149. #define PF_DLI          AF_DLI
  150. #define PF_LAT          AF_LAT
  151. #define PF_HYLINK       AF_HYLINK
  152. #define PF_APPLETALK    AF_APPLETALK
  153. #define PF_NETBIOS      AF_NB
  154. #define PF_NB           AF_NB
  155. #define PF_OS2          PF_UNIX
  156. #define PF_MAX          AF_MAX
  157.  
  158. /*
  159.  * Maximum queue length specifiable by listen.
  160.  */
  161. #define SOMAXCONN       5
  162.  
  163.  
  164. /*
  165.  * Message header for recvmsg and sendmsg calls.
  166.  */
  167. struct msghdr {
  168.         char * msg_name;               /* optional address */
  169.         int msg_namelen;            /* size of address */
  170.         struct  iovec *  msg_iov;         /* scatter/gather array */
  171.         int   msg_iovlen;             /* # elements in msg_iov */
  172.         char *  msg_accrights;          /* access rights sent/received */
  173.         int   msg_accrightslen;
  174. };
  175.  
  176. struct iovec {
  177.       char *  iov_base;
  178.         int     iov_len;
  179. };
  180.  
  181. struct uio {
  182.         struct  iovec  *uio_iov;
  183.         int     uio_iovcnt;
  184.         off_t   uio_offset;
  185.         int     uio_segflg;
  186.         unsigned int     uio_resid;
  187. };
  188. enum    uio_rw { UIO_READ, UIO_WRITE };
  189. #define FREAD  1
  190. #define FWRITE 2
  191.  
  192. #define MSG_OOB         0x1             /* process out-of-band data */
  193. #define MSG_PEEK        0x2             /* peek at incoming message */
  194. #define MSG_DONTROUTE   0x4             /* send without using routing tables */
  195. #define MSG_FULLREAD    0x8             /* send without using routing tables */
  196.  
  197. #define MSG_MAXIOVLEN   16
  198.  
  199. struct sockaddr_in;
  200.  
  201. int _System accept( int, struct sockaddr *, int * );
  202. void _System addsockettolist(int);
  203. int _System bind( int, struct sockaddr *, int );
  204. int _System connect( int, struct sockaddr *, int );
  205. int _System gethostid(void);
  206. int _System getpeername( int, struct sockaddr *, int * );
  207. int _System getsockname( int, struct sockaddr *, int * );
  208. int _System getsockopt( int, int, int, char *, int * );
  209. int _System ioctl(int, int, char *, int);
  210. int _System listen( int, int);
  211. int _System recvmsg( int, struct msghdr * , int);
  212. int _System recv( int, char *, int, int );
  213. int _System recvfrom(int, char *, int, int, struct sockaddr *, int * );
  214. int _System removesocketfromlist(int);
  215. #ifndef BSD_SELECT
  216. int _System select( int *, int, int, int, long );
  217. #endif
  218. int _System send( int, char *, int, int );
  219. int _System sendmsg( int, struct msghdr * , int);
  220. int _System sendto( int, char *, int, int, struct sockaddr *, int);
  221. int _System setsockopt( int, int, int, char *, int );
  222. int _System sock_init( void );
  223. int _System sock_errno( void );
  224. void _System psock_errno( char * );
  225. int _System socket( int, int, int );
  226. int _System soclose( int );
  227. int _System so_cancel(int);
  228. int _System readv(int, struct iovec * , int);
  229. int _System writev(int, struct iovec* , int);
  230. int _System shutdown(int, int);
  231. int _System Raccept(int, struct sockaddr *, int *);
  232. int _System Rbind(int, struct sockaddr_in *, int, struct sockaddr_in *);
  233. int _System Rconnect(int, const struct sockaddr *, int);
  234. int _System Rgetsockname(int, struct sockaddr *, int *);
  235. int _System Rlisten(int, int);
  236.  
  237. #define MT_FREE         0       /* should be on free list */
  238. #define MT_DATA         1       /* dynamic (data) allocation */
  239. #define MT_HEADER       2       /* packet header */
  240. #define MT_SOCKET       3       /* socket structure */
  241. #define MT_PCB          4       /* protocol control block */
  242. #define MT_RTABLE       5       /* routing tables */
  243. #define MT_HTABLE       6       /* IMP host tables */
  244. #define MT_ATABLE       7       /* address resolution tables */
  245. #define MT_SONAME       8       /* socket name */
  246. #define MT_ZOMBIE       9       /* zombie proc status */
  247. #define MT_SOOPTS       10      /* socket options */
  248. #define MT_FTABLE       11      /* fragment reassembly header */
  249. #define MT_RIGHTS       12      /* access rights */
  250. #define MT_IFADDR       13      /* interface address */
  251.  
  252. #pragma pack(1)
  253. /* used to get mbuf statistics */
  254. struct mbstat {
  255.         unsigned short   m_mbufs;        /* mbufs obtained from page pool */
  256.         unsigned short   m_clusters;     /* clusters obtained from page pool */
  257.         unsigned short   m_clfree;       /* free clusters */
  258.         unsigned short   m_drops;        /* times failed to find space */
  259.         unsigned long    m_wait;         /* times waited for space */
  260.         unsigned short   m_mtypes[256];  /* type specific mbuf allocations */
  261. };
  262.  
  263. struct sostats {
  264.   short count;
  265.   short socketdata[9*MAXSOCKETS];
  266. };
  267.  
  268. #pragma pack()
  269.  
  270. #endif /* __SOCKET_32H */
  271.  
  272.