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

MySQL数据库

开发平台:

Visual C++

  1. /*      @(#)socket.h 6.23 7/18/94 - STREAMware TCP/IP  source        */
  2. /*
  3.  * Copyrighted as an unpublished work.
  4.  * (c) Copyright 1987-1994 Legent Corporation
  5.  * All rights reserved.
  6.  *
  7.  * RESTRICTED RIGHTS
  8.  *
  9.  * These programs are supplied under a license.  They may be used,
  10.  * disclosed, and/or copied only as permitted under such license
  11.  * agreement.  Any copy must contain the above copyright notice and
  12.  * this restricted rights notice.  Use, copying, and/or disclosure
  13.  * of the programs is strictly prohibited unless otherwise provided
  14.  * in the license agreement.
  15.  *
  16.  */
  17. /*      SCCS IDENTIFICATION        */
  18. /*
  19.  * Copyright (c) 1985 Regents of the University of California.
  20.  * All rights reserved.
  21.  *
  22.  * Redistribution and use in source and binary forms are permitted
  23.  * provided that the above copyright notice and this paragraph are
  24.  * duplicated in all such forms and that any documentation,
  25.  * advertising materials, and other materials related to such
  26.  * distribution and use acknowledge that the software was developed
  27.  * by the University of California, Berkeley.  The name of the
  28.  * University may not be used to endorse or promote products derived
  29.  * from this software without specific prior written permission.
  30.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  31.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  32.  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  33.  */
  34. #ifndef __sys_socket_h
  35. #define __sys_socket_h
  36. #if !defined(FD_SETSIZE)
  37. /* Pick up select stuff from standard system include */
  38. #include <sys/types.h>
  39. #endif
  40. /* socket.h 6.1 83/07/29  */
  41. /*
  42.  * Definitions related to sockets: types, address families, options.
  43.  */
  44. /*
  45.  * Types
  46.  */
  47. #define SOCK_STREAM 1 /* stream socket */
  48. #define SOCK_DGRAM 2 /* datagram socket */
  49. #define SOCK_RAW 3 /* raw-protocol interface */
  50. #define SOCK_RDM 4 /* reliably-delivered message */
  51. #define SOCK_SEQPACKET 5 /* sequenced packet stream */
  52. /*
  53.  * Option flags per-socket.
  54.  */
  55. #define SO_DEBUG 0x0001 /* turn on debugging info recording */
  56. #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
  57. #define SO_REUSEADDR 0x0004 /* allow local address reuse */
  58. #define SO_KEEPALIVE 0x0008 /* keep connections alive */
  59. #define SO_DONTROUTE 0x0010 /* just use interface addresses */
  60. #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
  61. #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
  62. #define SO_LINGER 0x0080 /* linger on close if data present */
  63. #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
  64. #define SO_ORDREL 0x0200 /* give use orderly release */
  65. #define SO_IMASOCKET 0x0400 /* use socket semantics (affects bind) */
  66. #define SO_MGMT 0x0800 /* => it is used for mgmt. purposes */
  67. #define SO_REUSEPORT 0x1000 /* allow local port reuse */
  68. /*
  69.  * Additional options, not kept in so_options.
  70.  */
  71. #define SO_SNDBUF 0x1001 /* send buffer size */
  72. #define SO_RCVBUF 0x1002 /* receive buffer size */
  73. #define SO_SNDLOWAT 0x1003 /* send low-water mark */
  74. #define SO_RCVLOWAT 0x1004 /* receive low-water mark */
  75. #define SO_SNDTIMEO 0x1005 /* send timeout */
  76. #define SO_RCVTIMEO 0x1006 /* receive timeout */
  77. #define SO_ERROR 0x1007 /* get error status and clear */
  78. #define SO_TYPE 0x1008 /* get socket type */
  79. #define SO_PROTOTYPE 0x1009 /* get/set protocol type */
  80. /*
  81.  * Structure used for manipulating linger option.
  82.  */
  83. struct linger {
  84. int             l_onoff; /* option on/off */
  85. int             l_linger; /* linger time */
  86. };
  87. /*
  88.  * Level number for (get/set)sockopt() to apply to socket itself.
  89.  */
  90. #define SOL_SOCKET 0xffff /* options for socket level */
  91. /*
  92.  * An option specification consists of an opthdr, followed by the value of
  93.  * the option.  An options buffer contains one or more options.  The len
  94.  * field of opthdr specifies the length of the option value in bytes.  This
  95.  * length must be a multiple of sizeof(long) (use OPTLEN macro).
  96.  */
  97. struct opthdr {
  98. long            level; /* protocol level affected */
  99. long            name; /* option to modify */
  100. long            len; /* length of option value */
  101. };
  102. #define OPTLEN(x) ((((x) + sizeof(long) - 1) / sizeof(long)) * sizeof(long))
  103. #define OPTVAL(opt) ((char *)(opt + 1))
  104. #if defined(INKERNEL) || defined(_KERNEL) || defined(_INKERNEL)
  105. /*
  106.  * the optdefault structure is used for internal tables of option default
  107.  * values.
  108.  */
  109. struct optdefault {
  110. int             optname;/* the option */
  111. char           *val; /* ptr to default value */
  112. int             len; /* length of value */
  113. };
  114. /*
  115.  * the opproc structure is used to build tables of options processing
  116.  * functions for in_dooptions().
  117.  */
  118. struct opproc {
  119. int             level; /* options level this function handles */
  120. int             (*func) (); /* the function */
  121. };
  122. #endif
  123. /*
  124.  * Address families.
  125.  */
  126. #define AF_UNSPEC 0 /* unspecified */
  127. #define AF_UNIX 1 /* local to host (pipes, portals) */
  128. #define AF_INET 2 /* internetwork: UDP, TCP, etc. */
  129. #define AF_IMPLINK 3 /* arpanet imp addresses */
  130. #define AF_PUP 4 /* pup protocols: e.g. BSP */
  131. #define AF_CHAOS 5 /* mit CHAOS protocols */
  132. #define AF_NS 6 /* XEROX NS protocols */
  133. #define AF_ISO 7 /* ISO protocols */
  134. #define AF_OSI AF_ISO
  135. #define AF_ECMA 8 /* european computer manufacturers */
  136. #define AF_DATAKIT 9 /* datakit protocols */
  137. #define AF_CCITT 10 /* CCITT protocols, X.25 etc */
  138. #define AF_SNA 11 /* IBM SNA */
  139. #define AF_DECnet 12 /* DECnet */
  140. #define AF_DLI 13 /* Direct data link interface */
  141. #define AF_LAT 14 /* LAT */
  142. #define AF_HYLINK 15 /* NSC Hyperchannel */
  143. #define AF_APPLETALK 16 /* Apple Talk */
  144. #define AF_ROUTE        17      /* Internal Routing Protocol */
  145. #define AF_LINK         18      /* Link layer interface */
  146. #define pseudo_AF_XTP   19      /* eXpress Transfer Protocol (no AF) */
  147. #define AF_MAX          20
  148. /*
  149.  * Structure used by kernel to store most addresses.
  150.  */
  151. struct sockaddr {
  152. u_short         sa_family; /* address family */
  153. char            sa_data[14]; /* up to 14 bytes of direct address */
  154. };
  155. /*
  156.  * Structure used by kernel to pass protocol information in raw sockets.
  157.  */
  158. struct sockproto {
  159. unsigned short  sp_family; /* address family */
  160. unsigned short  sp_protocol; /* protocol */
  161. };
  162. /*
  163.  * Protocol families, same as address families for now.
  164.  */
  165. #define PF_UNSPEC AF_UNSPEC
  166. #define PF_UNIX AF_UNIX
  167. #define PF_INET AF_INET
  168. #define PF_IMPLINK AF_IMPLINK
  169. #define PF_PUP AF_PUP
  170. #define PF_CHAOS AF_CHAOS
  171. #define PF_NS AF_NS
  172. #define PF_NBS AF_NBS
  173. #define PF_ECMA AF_ECMA
  174. #define PF_DATAKIT AF_DATAKIT
  175. #define PF_CCITT AF_CCITT
  176. #define PF_SNA AF_SNA
  177. #define PF_DECnet       AF_DECnet
  178. #define PF_DLI          AF_DLI
  179. #define PF_LAT          AF_LAT
  180. #define PF_HYLINK       AF_HYLINK
  181. #define PF_APPLETALK    AF_APPLETALK
  182. #define PF_ROUTE        AF_ROUTE
  183. #define PF_LINK         AF_LINK
  184. #define PF_XTP          pseudo_AF_XTP   /* really just proto family, no AF */
  185. #define PF_MAX          AF_MAX
  186. /*
  187.  * Maximum queue length specifiable by listen.
  188.  */
  189. #define SOMAXCONN       5
  190. /*
  191.  * Message header for recvmsg and sendmsg calls.
  192.  * Used value-result for recmvsg, value only for sendmsg.
  193.  */
  194. struct msghdr {
  195. caddr_t         msg_name; /* optional address */
  196. u_int           msg_namelen; /* size of address */
  197. struct iovec   *msg_iov; /* scatter/gather array */
  198. u_int           msg_iovlen; /* # elements msg_iov */
  199. caddr_t         msg_control; /* ancillary data, see below */
  200. u_int           msg_controllen; /* ancillary data buffer len */
  201. int msg_flags; /* flags on received message */
  202. };
  203. #define msg_accrights msg_control
  204. #define msg_accrightslen msg_controllen
  205. #define MSG_OOB 0x1 /* process out-of-band data */
  206. #define MSG_PEEK 0x2 /* peek at incoming message */
  207. #define MSG_DONTROUTE 0x4 /* send without using routing tables */
  208. #define MSG_EOR         0x8     /* data completes record */ /*notused*/
  209. #define MSG_TRUNC       0x10    /* data discarded before delivery */
  210. #define MSG_CTRUNC      0x20    /* control data lost before delivery */
  211. #define MSG_WAITALL     0x40    /* wait for full request or error */ /*notused*/
  212. #define MSG_MAXIOVLEN 16
  213. /*
  214.  * Header for ancillary data objects in msg_control buffer.
  215.  * Used for additional information with/about a datagram
  216.  * not expressible by flags.  The format is a sequence
  217.  * of message elements headed by cmsghdr structures.
  218.  * In STREAMware, we shuffle the fields around a little from what
  219.  * they were in net-2, so that they line up the same as an opthdr
  220.  * which simplifies our socket implementation amazingly.
  221.  *
  222.  * Unfortunately, the opthdrs don't include their own length, which the
  223.  * cmsghdrs do.  What this means is that TLI programmers will not be
  224.  * able to take something returned using these macros and immediately give
  225.  * it back to the stack.  The size of the struct cmsghdr will have to be
  226.  * subtracted out.
  227.  * There doesn't seem to be a way to avoid this, since several applications
  228.  * look into the cmsg_len field and won't work if it doesn't include the size
  229.  * of the struct cmsghdr.
  230.  */
  231. struct cmsghdr {
  232.         int     cmsg_level;             /* originating protocol */
  233.         int     cmsg_type;              /* protocol-specific type */
  234.         u_int   cmsg_len;               /* data byte count, including hdr */
  235. /* followed by  u_char  cmsg_data[]; */
  236. };
  237. /* given pointer to struct adatahdr, return pointer to data */
  238. #define CMSG_DATA(cmsg)         ((u_char *)((cmsg) + 1))
  239. /* given pointer to struct adatahdr, return pointer to next adatahdr */
  240. #define CMSG_NXTHDR(mhdr, cmsg) 
  241.         (((caddr_t)(cmsg) + (cmsg)->cmsg_len + sizeof(struct cmsghdr) > 
  242.             (mhdr)->msg_control + (mhdr)->msg_controllen) ? 
  243.             (struct cmsghdr *)NULL : 
  244.             (struct cmsghdr *)((caddr_t)(cmsg) + OPTLEN((cmsg)->cmsg_len)))
  245. #define CMSG_FIRSTHDR(mhdr)     ((struct cmsghdr *)(mhdr)->msg_control)
  246. /* "Socket"-level control message types: */
  247. #define SCM_RIGHTS      0x01            /* access rights (array of int) */
  248. /*
  249.  * This ioctl code uses BSD style ioctls to avoid copyin/out problems.
  250.  * Ioctls have the command encoded in the lower word, and the size of any in
  251.  * or out parameters in the upper word.  The high 2 bits of the upper word
  252.  * are used to encode the in/out status of the parameter; for now we restrict
  253.  * parameters to at most 128 bytes.
  254.  */
  255. #define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */
  256. #define IOC_VOID 0x20000000 /* no parameters */
  257. #define IOC_OUT 0x40000000 /* copy out parameters */
  258. #define IOC_IN 0x80000000 /* copy in parameters */
  259. #define IOC_INOUT (IOC_IN|IOC_OUT)
  260. /* the 0x20000000 is so we can distinguish new ioctls from old */
  261. #define _IOS(x,y) (IOC_VOID|(x<<8)|y)
  262. #define _IOSR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
  263. #define _IOSW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
  264. /* this should be _IOSRW, but stdio got there first */
  265. #define _IOSWR(x,y,t) (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
  266. /*
  267.  * Socket ioctl commands
  268.  */
  269. #define SIOCSHIWAT _IOSW('S', 1, int) /* set high watermark */
  270. #define SIOCGHIWAT _IOSR('S', 2, int) /* get high watermark */
  271. #define SIOCSLOWAT _IOSW('S', 3, int) /* set low watermark */
  272. #define SIOCGLOWAT _IOSR('S', 4, int) /* get low watermark */
  273. #define SIOCATMARK _IOSR('S', 5, int) /* at oob mark? */
  274. #define SIOCSPGRP _IOSW('S', 6, int) /* set process group */
  275. #define SIOCGPGRP _IOSR('S', 7, int) /* get process group */
  276. #define FIONREAD _IOSR('S', 8, int) /* BSD compatibilty */
  277. #define FIONBIO _IOSW('S', 9, int) /* BSD compatibilty */
  278. #define FIOASYNC _IOSW('S', 10, int) /* BSD compatibilty */
  279. #define SIOCPROTO _IOSW('S', 11, struct socknewproto) /* link proto */
  280. #define SIOCGETNAME _IOSR('S', 12, struct sockaddr) /* getsockname */
  281. #define SIOCGETPEER _IOSR('S', 13, struct sockaddr) /* getpeername */
  282. #define IF_UNITSEL _IOSW('S', 14, int) /* set unit number */
  283. #define SIOCXPROTO _IOS('S', 15) /* empty proto table */
  284. #define SIOCSHRDTYPE _IOSW('S', 16, int) /* set hardware type */
  285. #define SIOCADDRT _IOSW('R', 9, struct ortentry) /* add route */
  286. #define SIOCDELRT _IOSW('R', 10, struct ortentry) /* delete route */
  287. #define SIOCSIFADDR _IOSW('I', 11, struct ifreq) /* set ifnet address */
  288. #define SIOCGIFADDR _IOSWR('I', 12, struct ifreq) /* get ifnet address */
  289. #define SIOCSIFDSTADDR _IOSW('I', 13, struct ifreq) /* set p-p address */
  290. #define SIOCGIFDSTADDR _IOSWR('I', 14, struct ifreq) /* get p-p address */
  291. #define SIOCSIFFLAGS _IOSW('I', 15, struct ifreq) /* set ifnet flags */
  292. #define SIOCGIFFLAGS _IOSWR('I', 16, struct ifreq) /* get ifnet flags */
  293. #define SIOCGIFCONF _IOSWR('I', 17, struct ifconf) /* get ifnet list */
  294. #define SIOCSIFMTU _IOSW('I', 21, struct ifreq) /* get if_mtu */
  295. #define SIOCGIFMTU _IOSWR('I', 22, struct ifreq) /* set if_mtu */
  296. #define SIOCGIFBRDADDR _IOSWR('I', 32, struct ifreq) /* get broadcast addr */
  297. #define SIOCSIFBRDADDR _IOSW('I', 33, struct ifreq) /* set broadcast addr */
  298. #define SIOCGIFNETMASK _IOSWR('I', 34, struct ifreq) /* get net addr mask */
  299. #define SIOCSIFNETMASK _IOSW('I', 35, struct ifreq) /* set net addr mask */
  300. #define SIOCGIFMETRIC _IOSWR('I', 36, struct ifreq) /* get IF metric */
  301. #define SIOCSIFMETRIC _IOSW('I', 37, struct ifreq) /* set IF metric */
  302. #define SIOCSARP _IOSW('I', 38, struct arpreq) /* set arp entry */
  303. #define SIOCGARP _IOSWR('I', 39, struct arpreq) /* get arp entry */
  304. #define SIOCDARP _IOSW('I', 40, struct arpreq) /* delete arp entry */
  305. #define SIOCSIFNAME _IOSW('I', 41, struct ifreq) /* set interface name */
  306. #define SIOCGIFONEP _IOSWR('I', 42, struct ifreq) /* get one-packet params */
  307. #define SIOCSIFONEP _IOSW('I', 43, struct ifreq) /* set one-packet params */
  308. #define SIOCDIFADDR _IOSW('I', 44, struct ifreq) /* delete IF addr */
  309. #define SIOCAIFADDR _IOSW('I', 45, struct ifaliasreq) /*add/change IF alias*/
  310. #define SIOCADDMULTI _IOSW('I', 49, struct ifreq) /* add m'cast addr */
  311. #define SIOCDELMULTI _IOSW('I', 50, struct ifreq) /* del m'cast addr */
  312. #define SIOCGIFALIAS _IOSWR('I', 51, struct ifaliasreq) /* get IF alias */
  313. #define SIOCSOCKSYS _IOSW('I', 66, struct socksysreq) /* Pseudo socket syscall */
  314. /* these use ifr_metric to pass the information */
  315. #define SIOCSIFDEBUG _IOSW('I', 67, struct ifreq) /* set if debug level */
  316. #define SIOCGIFDEBUG _IOSWR('I', 68, struct ifreq) /* get if debug level */
  317. #define SIOCSIFTYPE _IOSW('I', 69, struct ifreq) /* set if MIB type */
  318. #define SIOCGIFTYPE _IOSWR('I', 70, struct ifreq) /* get if MIB type */
  319. #define SIOCGIFNUM _IOSR('I', 71, int) /* get number of ifs */
  320. /*
  321.  * This returns the number of ifreqs that SIOCGIFCONF would return, including
  322.  * aliases.  This is the preferred way of sizing a buffer big enough to hold
  323.  * all interfaces.
  324.  */
  325. #define SIOCGIFANUM _IOSR('I', 72, int) /* get number of ifreqs */
  326. /*
  327.  * Interface specific performance tuning
  328.  */
  329. #define SIOCGIFPERF _IOSR('I', 73, struct ifreq) /* get perf info */
  330. #define SIOCSIFPERF _IOSR('I', 74, struct ifreq) /* get perf info */
  331. /*
  332.  * This structure is used to encode pseudo system calls
  333.  */
  334. struct socksysreq {
  335. /* When porting, make this the widest thing it can be */
  336. int   args[7];
  337. };
  338. /*
  339.  * This structure is used for adding new protocols to the list supported by
  340.  * sockets.
  341.  */
  342. struct socknewproto {
  343. int             family; /* address family (AF_INET, etc.) */
  344. int             type; /* protocol type (SOCK_STREAM, etc.) */
  345. int             proto; /* per family proto number */
  346. dev_t           dev; /* major/minor to use (must be a clone) */
  347. int             flags; /* protosw flags */
  348. };
  349. /*
  350.  * utility definitions.
  351.  */
  352. #ifdef MIN
  353. #undef MIN
  354. #endif
  355. #define MIN(x,y) ((x) < (y) ? (x) : (y))
  356. #ifndef MAX
  357. #define MAX(x,y) ((x) > (y) ? (x) : (y))
  358. #endif
  359. #define MAXHOSTNAMELEN 256
  360. #define NBBY 8 /* number of bits in a byte */
  361. /* defines for user/kernel interface */
  362. #define MAX_MINOR (makedev(1,0) - 1) /* could be non-portable */
  363. #define SOCKETSYS 140 /* SCO 3.2v5 */
  364. #define  SO_ACCEPT 1
  365. #define  SO_BIND 2
  366. #define  SO_CONNECT 3
  367. #define  SO_GETPEERNAME 4
  368. #define  SO_GETSOCKNAME 5
  369. #define  SO_GETSOCKOPT 6
  370. #define  SO_LISTEN 7
  371. #define  SO_RECV 8
  372. #define  SO_RECVFROM 9
  373. #define  SO_SEND 10
  374. #define  SO_SENDTO 11
  375. #define  SO_SETSOCKOPT 12
  376. #define  SO_SHUTDOWN 13
  377. #define  SO_SOCKET 14
  378. #define  SO_SELECT 15
  379. #define  SO_GETIPDOMAIN 16
  380. #define  SO_SETIPDOMAIN 17
  381. #define  SO_ADJTIME 18
  382. #define  SO_SETREUID 19
  383. #define  SO_SETREGID 20
  384. #define  SO_GETTIME 21
  385. #define  SO_SETTIME 22
  386. #define  SO_GETITIMER 23
  387. #define  SO_SETITIMER 24
  388. #define  SO_RECVMSG 25
  389. #define  SO_SENDMSG 26
  390. #define  SO_SOCKPAIR 27
  391. /*
  392.  * message flags
  393.  */
  394. #define M_BCAST 0x80000000
  395. /* Definitions and structures used for extracting */
  396. /* the size and/or the contents of kernel tables */
  397. /* Copyin/out values */
  398. #define GIARG 0x1
  399. #define CONTI 0x2
  400. #define GITAB 0x4
  401. struct gi_arg {
  402. caddr_t   gi_where;
  403. unsigned  gi_size;
  404. };
  405. #if !defined(_KERNEL) && !defined(INKERNEL) && !defined(_INKERNEL)
  406. #include <sys/cdefs.h>
  407. __BEGIN_DECLS
  408. int     accept __P_((int, struct sockaddr *, int *));
  409. int     bind __P_((int, const struct sockaddr *, int));
  410. int     connect __P_((int, const struct sockaddr *, int));
  411. int     getpeername __P_((int, struct sockaddr *, int *));
  412. int     getsockname __P_((int, struct sockaddr *, int *));
  413. int     getsockopt __P_((int, int, int, void *, int *));
  414. int     setsockopt __P_((int, int, int, const void *, int));
  415. int     listen __P_((int, int));
  416. ssize_t recv __P_((int, void *, size_t, int));
  417. ssize_t recvfrom __P_((int, void *, size_t, int, struct sockaddr *, int *));
  418. int     recvmsg __P_((int, struct msghdr *, int));
  419. ssize_t send __P_((int, const void *, size_t, int));
  420. int     sendmsg __P_((int, const struct msghdr *, int));
  421. ssize_t sendto __P_((int, const void *, size_t, int, const struct sockaddr *, int));
  422. int     shutdown __P_((int, int));
  423. int     socket __P_((int, int, int));
  424. int     socketpair __P_((int, int, int, int[2]));
  425. __END_DECLS
  426. #endif /* !INKERNEL */
  427. #endif /* __sys_socket_h */