socket.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:10k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1982,1985,1986,1988 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  * This product includes software developed by the University of
  16.  * California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  * @(#)socket.h 7.13 (Berkeley) 4/20/91
  34.  */
  35. #ifndef _SOCKET_H_
  36. #define _SOCKET_H_
  37. /*
  38.  * Definitions related to sockets: types, address families, options.
  39.  */
  40. /*
  41.  * Types
  42.  */
  43. #define SOCK_STREAM 1 /* stream socket */
  44. #define SOCK_DGRAM 2 /* datagram socket */
  45. #define SOCK_RAW 4 /* raw-protocol interface */
  46. #define SOCK_RDM 5 /* reliably-delivered message */
  47. #define SOCK_SEQPACKET 6 /* sequenced packet stream */
  48. /*
  49.  * Option flags per-socket.
  50.  */
  51. #define SO_DEBUG 0x0001 /* turn on debugging info recording */
  52. #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
  53. #define SO_REUSEADDR 0x0004 /* allow local address reuse */
  54. #define SO_KEEPALIVE 0x0008 /* keep connections alive */
  55. #define SO_DONTROUTE 0x0010 /* just use interface addresses */
  56. #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
  57. #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
  58. #define SO_LINGER 0x0080 /* linger on close if data present */
  59. #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
  60. /*
  61.  * Additional options, not kept in so_options.
  62.  */
  63. #define SO_SNDBUF 0x1001 /* send buffer size */
  64. #define SO_RCVBUF 0x1002 /* receive buffer size */
  65. #define SO_SNDLOWAT 0x1003 /* send low-water mark */
  66. #define SO_RCVLOWAT 0x1004 /* receive low-water mark */
  67. #define SO_SNDTIMEO 0x1005 /* send timeout */
  68. #define SO_RCVTIMEO 0x1006 /* receive timeout */
  69. #define SO_ERROR 0x1007 /* get error status and clear */
  70. #define SO_TYPE 0x1008 /* get socket type */
  71. #define SO_PROTOTYPE    0x1009      /* get/set protocol type */
  72. /*
  73.  * Structure used for manipulating linger option.
  74.  */
  75. struct linger {
  76. int l_onoff; /* option on/off */
  77. int l_linger; /* linger time */
  78. };
  79. /*
  80.  * Level number for (get/set)sockopt() to apply to socket itself.
  81.  */
  82. #define SOL_SOCKET 0xffff /* options for socket level */
  83. /*
  84.  * Address families.
  85.  */
  86. #define AF_UNSPEC 0 /* unspecified */
  87. #define AF_UNIX 1 /* local to host (pipes, portals) */
  88. #define AF_INET 2 /* internetwork: UDP, TCP, etc. */
  89. #define AF_IMPLINK 3 /* arpanet imp addresses */
  90. #define AF_PUP 4 /* pup protocols: e.g. BSP */
  91. #define AF_CHAOS 5 /* mit CHAOS protocols */
  92. #define AF_NS 6 /* XEROX NS protocols */
  93. #define AF_NBS      7        /* nbs protocols */
  94. #define AF_ECMA 8 /* european computer manufacturers */
  95. #define AF_DATAKIT 9 /* datakit protocols */
  96. #define AF_CCITT 10 /* CCITT protocols, X.25 etc */
  97. #define AF_SNA 11 /* IBM SNA */
  98. #define AF_DECnet 12 /* DECnet */
  99. #define AF_DLI 13 /* DEC Direct data link interface */
  100. #define AF_LAT 14 /* LAT */
  101. #define AF_HYLINK 15 /* NSC Hyperchannel */
  102. #define AF_APPLETALK 16 /* Apple Talk */
  103. #define AF_NIT        17       /* Network Interface Tap */
  104. #define AF_802       18       /* IEEE 802.2, also ISO 8802 */
  105. #define AF_ISO 19 /* ISO protocols */
  106. #define AF_OSI AF_ISO
  107. #define AF_X25       20       /* CCITT X.25 in particular */
  108. #define AF_OSINET 21
  109. #define AF_GOSIP 22
  110. #define AF_MAX 22
  111. /* Not supported by solaris */
  112. /* #define AF_ROUTE 17 /* Internal Routing Protocol */
  113. /* #define AF_LINK 18 /* Link layer interface */
  114. /* #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
  115. /*
  116.  * Structure used by kernel to store most
  117.  * addresses.
  118.  */
  119. struct sockaddr {
  120. u_short sa_family; /* address family */
  121. char sa_data[14]; /* actually longer; address value */
  122. };
  123. /*
  124.  * Structure used by kernel to pass protocol
  125.  * information in raw sockets.
  126.  */
  127. struct sockproto {
  128. u_short sp_family; /* address family */
  129. u_short sp_protocol; /* protocol */
  130. };
  131. /*
  132.  * Protocol families, same as address families for now.
  133.  */
  134. #define PF_UNSPEC AF_UNSPEC
  135. #define PF_UNIX AF_UNIX
  136. #define PF_INET AF_INET
  137. #define PF_IMPLINK AF_IMPLINK
  138. #define PF_PUP AF_PUP
  139. #define PF_CHAOS AF_CHAOS
  140. #define PF_NS AF_NS
  141. #define PF_NBS AF_NBS
  142. #define PF_ECMA AF_ECMA
  143. #define PF_DATAKIT AF_DATAKIT
  144. #define PF_CCITT AF_CCITT
  145. #define PF_SNA AF_SNA
  146. #define PF_DECnet AF_DECnet
  147. #define PF_DLI AF_DLI
  148. #define PF_LAT AF_LAT
  149. #define PF_HYLINK AF_HYLINK
  150. #define PF_APPLETALK AF_APPLETALK
  151. #define PF_NIT AF_NIT
  152. #define PF_802 AF_802
  153. #define PF_ISO AF_ISO
  154. #define PF_OSI AF_ISO
  155. #define PF_X25 AF_X25
  156. #define PF_OSINET AF_OSINET
  157. #define PF_GOSIP AF_GOSIP
  158. #define PF_MAX AF_MAX
  159. /* #define PF_ROUTE AF_ROUTE */
  160. /* #define PF_LINK AF_LINK */
  161. /* #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */
  162. /*
  163.  * Maximum queue length specifiable by listen.
  164.  */
  165. #define SOMAXCONN 5
  166. /*
  167.  * Message header for recvmsg and sendmsg calls.
  168.  * Used value-result for recvmsg, value only for sendmsg.
  169.  */
  170. struct msghdr {
  171. caddr_t msg_name; /* optional address */
  172. u_int msg_namelen; /* size of address */
  173. struct iovec *msg_iov; /* scatter/gather array */
  174. u_int msg_iovlen; /* # elements in msg_iov */
  175. caddr_t msg_accrights;      /* access rights sent/received */
  176.     int msg_accrightslen;
  177. };
  178. #define MSG_MAXIOVLEN   16
  179. #define MSG_OOB 0x1 /* process out-of-band data */
  180. #define MSG_PEEK 0x2 /* peek at incoming message */
  181. #define MSG_DONTROUTE 0x4 /* send without using routing tables */
  182. /* #define MSG_EOR 0x8  data completes record */
  183. /* #define MSG_TRUNC 0x10  data discarded before delivery */
  184. /* #define MSG_CTRUNC 0x20  control data lost before delivery */
  185. /* #define MSG_WAITALL 0x40  wait for full request or error */
  186. /*
  187.  * Header for ancillary data objects in msg_control buffer.
  188.  * Used for additional information with/about a datagram
  189.  * not expressible by flags.  The format is a sequence
  190.  * of message elements headed by cmsghdr structures.
  191.  */
  192. struct cmsghdr {
  193. u_int cmsg_len; /* data byte count, including hdr */
  194. int cmsg_level; /* originating protocol */
  195. int cmsg_type; /* protocol-specific type */
  196. /* followed by u_char  cmsg_data[]; */
  197. };
  198. /* given pointer to struct adatahdr, return pointer to data */
  199. #define CMSG_DATA(cmsg) ((u_char *)((cmsg) + 1))
  200. /* given pointer to struct adatahdr, return pointer to next adatahdr */
  201. #define CMSG_NXTHDR(mhdr, cmsg)
  202. (((caddr_t)(cmsg) + (cmsg)->cmsg_len + sizeof(struct cmsghdr) > 
  203.     (mhdr)->msg_control + (mhdr)->msg_controllen) ? 
  204.     (struct cmsghdr *)NULL : 
  205.     (struct cmsghdr *)((caddr_t)(cmsg) + ALIGN((cmsg)->cmsg_len)))
  206. #define CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control)
  207. /* "Socket"-level control message types: */
  208. #define SCM_RIGHTS 0x01 /* access rights (array of int) */
  209. /*
  210.  * 4.3 compat sockaddr, move to compat file later
  211.  */
  212. struct osockaddr {
  213. u_short sa_family; /* address family */
  214. char sa_data[14]; /* up to 14 bytes of direct address */
  215. };
  216. #define SYS_socketcall 83
  217. #define SO_ACCEPT    1
  218. #define SO_BIND      2
  219. #define SO_CONNECT   3
  220. #define SO_GETPEERNAME    4
  221. #define SO_GETSOCKNAME    5
  222. #define SO_GETSOCKOPT     6
  223. #define SO_LISTEN    7
  224. #define SO_RECV      8
  225. #define SO_RECVFROM  9
  226. #define SO_SEND      10
  227. #define SO_SENDTO    11
  228. #define SO_SETSOCKOPT     12
  229. #define SO_SHUTDOWN  13
  230. #define SO_SOCKET    14
  231. #define SO_SOCKPOLL  15
  232. #define SO_GETIPDOMAIN    16
  233. #define SO_SETIPDOMAIN    17
  234. #define SO_ADJTIME   18
  235. #include <sys/cdefs.h>
  236. __BEGIN_DECLS
  237. int accept __P_((int, struct sockaddr *, int *));
  238. int bind __P_((int, const struct sockaddr *, int));
  239. int connect __P_((int, const struct sockaddr *, int));
  240. int getpeername __P_((int, struct sockaddr *, int *));
  241. int getsockname __P_((int, struct sockaddr *, int *));
  242. int getsockopt __P_((int, int, int, void *, int *));
  243. int listen __P_((int, int));
  244. /* original definitions
  245. int recv __P_((int, void *, int, int));
  246. int recvfrom __P_((int, void *, int, int,
  247. struct sockaddr *, int *));
  248. int recvmsg __P_((int, struct msghdr *, int));
  249. int send __P_((int, const void *, int, int));
  250. int sendto __P_((int, const void *, int, int, const struct sockaddr *, int));
  251. int sendmsg __P_((int, const struct msghdr *, int));
  252. */
  253. ssize_t recv __P_((int, void *, size_t, int));
  254. ssize_t recvfrom __P_((int, void *, size_t, int,
  255. struct sockaddr *, int *));
  256. ssize_t recvmsg __P_((int, struct msghdr *, int));
  257. ssize_t send __P_((int, const void *, size_t, int));
  258. ssize_t sendto __P_((int, const void *, size_t, int,
  259. const struct sockaddr *, int));
  260. ssize_t sendmsg __P_((int, const struct msghdr *, int));
  261. int setsockopt __P_((int, int, int, const void *, int));
  262. int shutdown __P_((int, int));
  263. int socket __P_((int, int, int));
  264. int socketpair __P_((int, int, int, int *));
  265. __END_DECLS
  266. #endif /* !_SOCKET_H_ */