socket.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #ifndef __SYS_SOCKET_H__
  2. #define __SYS_SOCKET_H__
  3. #ifndef _BSD_EXTENSION
  4. This header file is an extension to ANSI/POSIX
  5. #endif
  6. #pragma lib "/$M/lib/ape/libbsd.a"
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. /*
  11. * Copyright (c) 1982,1985, 1986 Regents of the University of California.
  12. * All rights reserved. The Berkeley software License Agreement
  13. * specifies the terms and conditions for redistribution.
  14. *
  15. * @(#)socket.h 7.1 (Berkeley) 6/4/86
  16. */
  17. /*
  18. * Definitions related to sockets: types, address families, options.
  19. */
  20. /*
  21. * Types
  22. */
  23. #define SOCK_STREAM 1 /* stream socket */
  24. #define SOCK_DGRAM 2 /* datagram socket */
  25. #define SOCK_RAW 3 /* raw-protocol interface */
  26. #define SOCK_RDM 4 /* reliably-delivered message */
  27. #define SOCK_SEQPACKET 5 /* sequenced packet stream */
  28. /*
  29. * Option flags per-socket.
  30. */
  31. #ifdef HAVE_SOCK_OPTS
  32. #define SO_DEBUG 0x0001 /* turn on debugging info recording */
  33. #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
  34. #define SO_REUSEADDR 0x0004 /* allow local address reuse */
  35. #define SO_KEEPALIVE 0x0008 /* keep connections alive */
  36. #define SO_DONTROUTE 0x0010 /* just use interface addresses */
  37. #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
  38. #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
  39. #define SO_LINGER 0x0080 /* linger on close if data present */
  40. #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
  41. #endif
  42. /*
  43. * Additional options, not kept in so_options.
  44. */
  45. #define SO_SNDBUF 0x1001 /* send buffer size */
  46. #define SO_RCVBUF 0x1002 /* receive buffer size */
  47. #define SO_SNDLOWAT 0x1003 /* send low-water mark */
  48. #define SO_RCVLOWAT 0x1004 /* receive low-water mark */
  49. #define SO_SNDTIMEO 0x1005 /* send timeout */
  50. #define SO_RCVTIMEO 0x1006 /* receive timeout */
  51. #define SO_ERROR 0x1007 /* get error status and clear */
  52. #define SO_TYPE 0x1008 /* get socket type */
  53. /*
  54. * Structure used for manipulating linger option.
  55. */
  56. struct linger {
  57. int l_onoff; /* option on/off */
  58. int l_linger; /* linger time */
  59. };
  60. /*
  61. * Level number for (get/set)sockopt() to apply to socket itself.
  62. */
  63. #define SOL_SOCKET 0xffff /* options for socket level */
  64. /*
  65. * Address families.
  66. * XTP really is not an address family, but is included here to take
  67. * up space, because other AF_ entries are numerically equal to their
  68. * PF_ counterparts.
  69. */
  70. #define AF_UNSPEC 0 /* unspecified */
  71. #define AF_UNIX 1 /* local to host (pipes, portals) */
  72. #define AF_INET 2 /* internetwork: UDP, TCP, etc. */
  73. #define AF_IMPLINK 3 /* arpanet imp addresses */
  74. #define AF_PUP 4 /* pup protocols: e.g. BSP */
  75. #define AF_CHAOS 5 /* mit CHAOS protocols */
  76. #define AF_NS 6 /* XEROX NS protocols */
  77. #define AF_ISO 7 /* ISO protocols */
  78. #define AF_OSI AF_ISO
  79. #define AF_ECMA 8 /* european computer manufacturers */
  80. #define AF_DATAKIT 9 /* datakit protocols */
  81. #define AF_CCITT 10 /* CCITT protocols, X.25 etc */
  82. #define AF_SNA 11 /* IBM SNA */
  83. #define AF_DECnet 12 /* DECnet */
  84. #define AF_DLI 13 /* DEC Direct data link interface */
  85. #define AF_LAT 14 /* LAT */
  86. #define AF_HYLINK 15 /* NSC Hyperchannel */
  87. #define AF_APPLETALK 16 /* Apple Talk */
  88. #define AF_ROUTE 17 /* Internal Routing Protocol */
  89. #define AF_LINK 18 /* Link layer interface */
  90. #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
  91. #define AF_INET6 24 /* IP version 6 */
  92. #define AF_MAX 30
  93. /*
  94. * Structure used by kernel to store most
  95. * addresses.
  96. */
  97. struct sockaddr {
  98. unsigned short sa_family; /* address family */
  99. char sa_data[108];
  100. };
  101. /*
  102. * Structure used by kernel to pass protocol
  103. * information in raw sockets.
  104. */
  105. struct sockproto {
  106. unsigned short sp_family; /* address family */
  107. unsigned short sp_protocol; /* protocol */
  108. };
  109. /*
  110. * Protocol families, same as address families for now.
  111. */
  112. #define PF_UNSPEC AF_UNSPEC
  113. #define PF_UNIX AF_UNIX
  114. #define PF_INET AF_INET
  115. #define PF_IMPLINK AF_IMPLINK
  116. #define PF_PUP AF_PUP
  117. #define PF_CHAOS AF_CHAOS
  118. #define PF_NS AF_NS
  119. #define PF_ISO AF_ISO
  120. #define PF_OSI AF_ISO
  121. #define PF_ECMA AF_ECMA
  122. #define PF_DATAKIT AF_DATAKIT
  123. #define PF_CCITT AF_CCITT
  124. #define PF_SNA AF_SNA
  125. #define PF_DECnet AF_DECnet
  126. #define PF_DLI AF_DLI
  127. #define PF_LAT AF_LAT
  128. #define PF_HYLINK AF_HYLINK
  129. #define PF_APPLETALK AF_APPLETALK
  130. #define PF_ROUTE AF_ROUTE
  131. #define PF_LINK AF_LINK
  132. #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */
  133. #define PF_INET6 AF_INET6
  134. #define PF_MAX AF_MAX
  135. /*
  136. * Maximum queue length specifiable by listen.
  137. */
  138. #define SOMAXCONN 5
  139. /*
  140. * Message header for recvmsg and sendmsg calls.
  141. */
  142. struct msghdr {
  143. char *msg_name; /* optional address */
  144. int msg_namelen; /* size of address */
  145. struct iovec *msg_iov; /* scatter/gather array */
  146. int msg_iovlen; /* # elements in msg_iov */
  147. char *msg_accrights; /* access rights sent/received */
  148. int msg_accrightslen;
  149. };
  150. #define MSG_OOB 0x1 /* process out-of-band data */
  151. #define MSG_PEEK 0x2 /* peek at incoming message */
  152. #define MSG_DONTROUTE 0x4 /* send without using routing tables */
  153. #define MSG_MAXIOVLEN 16
  154. extern int accept(int, void *, int *);
  155. extern int bind(int, void *, int);
  156. extern int connect(int, void *, int);
  157. extern int getpeername(int, void *, int *);
  158. extern int getsockname(int, void *, int *);
  159. extern int getsockopt(int, int, int, void *, int *);
  160. extern int setsockopt(int, int, int, void *, int);
  161. extern int listen(int, int);
  162. extern int recv(int, void *, int, int);
  163. extern int recvfrom(int, void *, int, int, void *, int *);
  164. extern int recvmsg(int, struct msghdr *, int);
  165. extern int send(int, void *, int, int);
  166. extern int sendto(int, void *, int, int, void *, int);
  167. extern int sendmsg(int, struct msghdr *, int);
  168. extern int shutdown(int, int);
  169. extern int socket(int, int, int);
  170. extern int socketpair(int, int, int, int *);
  171. #ifdef __cplusplus
  172. }
  173. #endif
  174. #endif /* !__SYS_SOCKET_H__ */