|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* Copyright (c) 1998, 1999 Apple Computer, Inc. All Rights Reserved */ ! 23: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ ! 24: /* ! 25: * Copyright (c) 1982, 1985, 1986, 1988, 1993, 1994 ! 26: * The Regents of the University of California. All rights reserved. ! 27: * ! 28: * Redistribution and use in source and binary forms, with or without ! 29: * modification, are permitted provided that the following conditions ! 30: * are met: ! 31: * 1. Redistributions of source code must retain the above copyright ! 32: * notice, this list of conditions and the following disclaimer. ! 33: * 2. Redistributions in binary form must reproduce the above copyright ! 34: * notice, this list of conditions and the following disclaimer in the ! 35: * documentation and/or other materials provided with the distribution. ! 36: * 3. All advertising materials mentioning features or use of this software ! 37: * must display the following acknowledgement: ! 38: * This product includes software developed by the University of ! 39: * California, Berkeley and its contributors. ! 40: * 4. Neither the name of the University nor the names of its contributors ! 41: * may be used to endorse or promote products derived from this software ! 42: * without specific prior written permission. ! 43: * ! 44: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 45: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 46: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 47: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 48: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 49: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 50: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 51: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 52: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 53: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 54: * SUCH DAMAGE. ! 55: * ! 56: * @(#)socket.h 8.4 (Berkeley) 2/21/94 ! 57: */ ! 58: ! 59: #ifndef _SYS_SOCKET_H_ ! 60: #define _SYS_SOCKET_H_ ! 61: ! 62: ! 63: /* ! 64: * Definitions related to sockets: types, address families, options. ! 65: */ ! 66: ! 67: /* ! 68: * Types ! 69: */ ! 70: #define SOCK_STREAM 1 /* stream socket */ ! 71: #define SOCK_DGRAM 2 /* datagram socket */ ! 72: #define SOCK_RAW 3 /* raw-protocol interface */ ! 73: #define SOCK_RDM 4 /* reliably-delivered message */ ! 74: #define SOCK_SEQPACKET 5 /* sequenced packet stream */ ! 75: ! 76: /* ! 77: * Option flags per-socket. ! 78: */ ! 79: #define SO_DEBUG 0x0001 /* turn on debugging info recording */ ! 80: #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ ! 81: #define SO_REUSEADDR 0x0004 /* allow local address reuse */ ! 82: #define SO_KEEPALIVE 0x0008 /* keep connections alive */ ! 83: #define SO_DONTROUTE 0x0010 /* just use interface addresses */ ! 84: #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ ! 85: #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ ! 86: #define SO_LINGER 0x0080 /* linger on close if data present */ ! 87: #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ ! 88: #define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ ! 89: #define SO_TIMESTAMP 0x0400 /* timestamp received dgram traffic */ ! 90: ! 91: #define SO_DONTTRUNC 0x2000 /* APPLE: Retain unread data */ ! 92: /* (ATOMIC proto) */ ! 93: #define SO_WANTMORE 0x4000 /* APPLE: Give hint when more data ready */ ! 94: ! 95: /* ! 96: * Additional options, not kept in so_options. ! 97: */ ! 98: #define SO_SNDBUF 0x1001 /* send buffer size */ ! 99: #define SO_RCVBUF 0x1002 /* receive buffer size */ ! 100: #define SO_SNDLOWAT 0x1003 /* send low-water mark */ ! 101: #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ ! 102: #define SO_SNDTIMEO 0x1005 /* send timeout */ ! 103: #define SO_RCVTIMEO 0x1006 /* receive timeout */ ! 104: #define SO_ERROR 0x1007 /* get error status and clear */ ! 105: #define SO_TYPE 0x1008 /* get socket type */ ! 106: #define SO_PRIVSTATE 0x1009 /* get/deny privileged state */ ! 107: #define SO_NREAD 0x1020 /* APPLE: get 1st-packet byte count */ ! 108: #define SO_NKE 0x1021 /* APPLE: Install socket-level NKE */ ! 109: ! 110: /* ! 111: * Structure used for manipulating linger option. ! 112: */ ! 113: struct linger { ! 114: int l_onoff; /* option on/off */ ! 115: int l_linger; /* linger time */ ! 116: }; ! 117: ! 118: /* ! 119: * Level number for (get/set)sockopt() to apply to socket itself. ! 120: */ ! 121: #define SOL_SOCKET 0xffff /* options for socket level */ ! 122: ! 123: /* ! 124: * Address families. ! 125: */ ! 126: #define AF_UNSPEC 0 /* unspecified */ ! 127: #define AF_LOCAL 1 /* local to host (pipes, portals) */ ! 128: #define AF_UNIX AF_LOCAL /* backward compatibility */ ! 129: #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ ! 130: #define AF_IMPLINK 3 /* arpanet imp addresses */ ! 131: #define AF_PUP 4 /* pup protocols: e.g. BSP */ ! 132: #define AF_CHAOS 5 /* mit CHAOS protocols */ ! 133: #define AF_NS 6 /* XEROX NS protocols */ ! 134: #define AF_ISO 7 /* ISO protocols */ ! 135: #define AF_OSI AF_ISO ! 136: #define AF_ECMA 8 /* european computer manufacturers */ ! 137: #define AF_DATAKIT 9 /* datakit protocols */ ! 138: #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ ! 139: #define AF_SNA 11 /* IBM SNA */ ! 140: #define AF_DECnet 12 /* DECnet */ ! 141: #define AF_DLI 13 /* DEC Direct data link interface */ ! 142: #define AF_LAT 14 /* LAT */ ! 143: #define AF_HYLINK 15 /* NSC Hyperchannel */ ! 144: #define AF_APPLETALK 16 /* Apple Talk */ ! 145: #define AF_ROUTE 17 /* Internal Routing Protocol */ ! 146: #define AF_LINK 18 /* Link layer interface */ ! 147: #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */ ! 148: #define AF_COIP 20 /* connection-oriented IP, aka ST II */ ! 149: #define AF_CNT 21 /* Computer Network Technology */ ! 150: #define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */ ! 151: #define AF_IPX 23 /* Novell Internet Protocol */ ! 152: #define AF_SIP 24 /* Simple Internet Protocol */ ! 153: #define pseudo_AF_PIP 25 /* Help Identify PIP packets */ ! 154: /* Sigh - The following 2 should */ ! 155: /* be maintained for MacOSX */ ! 156: /* binary compatibility */ ! 157: #define pseudo_AF_BLUE 26 /* Identify packets for Blue Box */ ! 158: #define AF_NDRV 27 /* Network Driver 'raw' access */ ! 159: #define AF_ISDN 28 /* Integrated Services Digital Network*/ ! 160: #define AF_E164 AF_ISDN /* CCITT E.164 recommendation */ ! 161: #define pseudo_AF_KEY 29 /* Internal key-management function */ ! 162: #define AF_INET6 30 /* IPv6 */ ! 163: #define AF_NATM 31 /* native ATM access */ ! 164: ! 165: #define AF_MAX 32 ! 166: ! 167: /* ! 168: * Structure used by kernel to store most ! 169: * addresses. ! 170: */ ! 171: struct sockaddr { ! 172: u_char sa_len; /* total length */ ! 173: u_char sa_family; /* address family */ ! 174: char sa_data[14]; /* actually longer; address value */ ! 175: }; ! 176: #define SOCK_MAXADDRLEN 255 /* longest possible addresses */ ! 177: ! 178: /* ! 179: * Structure used by kernel to pass protocol ! 180: * information in raw sockets. ! 181: */ ! 182: struct sockproto { ! 183: u_short sp_family; /* address family */ ! 184: u_short sp_protocol; /* protocol */ ! 185: }; ! 186: ! 187: #if 1 ! 188: /* ! 189: * bsd-api-new-02a: protocol-independent placeholder for socket addresses ! 190: */ ! 191: #define _SS_MAXSIZE 128 ! 192: #define _SS_ALIGNSIZE (sizeof(int64_t)) ! 193: #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) * 2) ! 194: #define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) * 2 - \ ! 195: _SS_PAD1SIZE - _SS_ALIGNSIZE) ! 196: ! 197: struct sockaddr_storage { ! 198: u_char ss_len; /* address length */ ! 199: u_char ss_family; /* address family */ ! 200: char _ss_pad1[_SS_PAD1SIZE]; ! 201: int64_t _ss_align; /* force desired structure storage alignment */ ! 202: char _ss_pad2[_SS_PAD2SIZE]; ! 203: }; ! 204: #endif ! 205: ! 206: /* ! 207: * Protocol families, same as address families for now. ! 208: */ ! 209: #define PF_UNSPEC AF_UNSPEC ! 210: #define PF_LOCAL AF_LOCAL ! 211: #define PF_UNIX PF_LOCAL /* backward compatibility */ ! 212: #define PF_INET AF_INET ! 213: #define PF_INET6 AF_INET6 ! 214: #define PF_IMPLINK AF_IMPLINK ! 215: #define PF_PUP AF_PUP ! 216: #define PF_CHAOS AF_CHAOS ! 217: #define PF_NS AF_NS ! 218: #define PF_ISO AF_ISO ! 219: #define PF_OSI AF_ISO ! 220: #define PF_ECMA AF_ECMA ! 221: #define PF_DATAKIT AF_DATAKIT ! 222: #define PF_CCITT AF_CCITT ! 223: #define PF_SNA AF_SNA ! 224: #define PF_DECnet AF_DECnet ! 225: #define PF_DLI AF_DLI ! 226: #define PF_LAT AF_LAT ! 227: #define PF_HYLINK AF_HYLINK ! 228: #define PF_APPLETALK AF_APPLETALK ! 229: #define PF_ROUTE AF_ROUTE ! 230: #define PF_LINK AF_LINK ! 231: #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */ ! 232: #define PF_COIP AF_COIP ! 233: #define PF_CNT AF_CNT ! 234: #define PF_SIP AF_SIP ! 235: #define PF_IPX AF_IPX /* same format as AF_NS */ ! 236: #define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */ ! 237: #define PF_PIP pseudo_AF_PIP ! 238: ! 239: #define PF_NDRV AF_NDRV ! 240: #define PF_ISDN AF_ISDN ! 241: #define PF_KEY pseudo_AF_KEY ! 242: #define PF_INET6 AF_INET6 ! 243: #define PF_NATM AF_NATM ! 244: #define PF_ATM AF_ATM ! 245: ! 246: #define PF_MAX AF_MAX ! 247: ! 248: /* ! 249: * Definitions for network related sysctl, CTL_NET. ! 250: * ! 251: * Second level is protocol family. ! 252: * Third level is protocol number. ! 253: * ! 254: * Further levels are defined by the individual families below. ! 255: */ ! 256: #define NET_MAXID AF_MAX ! 257: ! 258: #define CTL_NET_NAMES { \ ! 259: { 0, 0 }, \ ! 260: { "local", CTLTYPE_NODE }, \ ! 261: { "inet", CTLTYPE_NODE }, \ ! 262: { "implink", CTLTYPE_NODE }, \ ! 263: { "pup", CTLTYPE_NODE }, \ ! 264: { "chaos", CTLTYPE_NODE }, \ ! 265: { "xerox_ns", CTLTYPE_NODE }, \ ! 266: { "iso", CTLTYPE_NODE }, \ ! 267: { "emca", CTLTYPE_NODE }, \ ! 268: { "datakit", CTLTYPE_NODE }, \ ! 269: { "ccitt", CTLTYPE_NODE }, \ ! 270: { "ibm_sna", CTLTYPE_NODE }, \ ! 271: { "decnet", CTLTYPE_NODE }, \ ! 272: { "dec_dli", CTLTYPE_NODE }, \ ! 273: { "lat", CTLTYPE_NODE }, \ ! 274: { "hylink", CTLTYPE_NODE }, \ ! 275: { "appletalk", CTLTYPE_NODE }, \ ! 276: { "route", CTLTYPE_NODE }, \ ! 277: { "link_layer", CTLTYPE_NODE }, \ ! 278: { "xtp", CTLTYPE_NODE }, \ ! 279: { "coip", CTLTYPE_NODE }, \ ! 280: { "cnt", CTLTYPE_NODE }, \ ! 281: { "rtip", CTLTYPE_NODE }, \ ! 282: { "ipx", CTLTYPE_NODE }, \ ! 283: { "sip", CTLTYPE_NODE }, \ ! 284: { "pip", CTLTYPE_NODE }, \ ! 285: { "isdn", CTLTYPE_NODE }, \ ! 286: { "key", CTLTYPE_NODE }, \ ! 287: { "inet6", CTLTYPE_NODE }, \ ! 288: { "natm", CTLTYPE_NODE }, \ ! 289: } ! 290: ! 291: /* ! 292: * PF_ROUTE - Routing table ! 293: * ! 294: * Three additional levels are defined: ! 295: * Fourth: address family, 0 is wildcard ! 296: * Fifth: type of info, defined below ! 297: * Sixth: flag(s) to mask with for NET_RT_FLAGS ! 298: */ ! 299: #define NET_RT_DUMP 1 /* dump; may limit to a.f. */ ! 300: #define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */ ! 301: #define NET_RT_IFLIST 3 /* survey interface list */ ! 302: #define NET_RT_MAXID 4 ! 303: ! 304: #define CTL_NET_RT_NAMES { \ ! 305: { 0, 0 }, \ ! 306: { "dump", CTLTYPE_STRUCT }, \ ! 307: { "flags", CTLTYPE_STRUCT }, \ ! 308: { "iflist", CTLTYPE_STRUCT }, \ ! 309: } ! 310: ! 311: /* ! 312: * Maximum queue length specifiable by listen. ! 313: */ ! 314: #define SOMAXCONN 128 ! 315: ! 316: /* ! 317: * Message header for recvmsg and sendmsg calls. ! 318: * Used value-result for recvmsg, value only for sendmsg. ! 319: */ ! 320: struct msghdr { ! 321: caddr_t msg_name; /* optional address */ ! 322: u_int msg_namelen; /* size of address */ ! 323: struct iovec *msg_iov; /* scatter/gather array */ ! 324: u_int msg_iovlen; /* # elements in msg_iov */ ! 325: caddr_t msg_control; /* ancillary data, see below */ ! 326: u_int msg_controllen; /* ancillary data buffer len */ ! 327: int msg_flags; /* flags on received message */ ! 328: }; ! 329: ! 330: #define MSG_OOB 0x1 /* process out-of-band data */ ! 331: #define MSG_PEEK 0x2 /* peek at incoming message */ ! 332: #define MSG_DONTROUTE 0x4 /* send without using routing tables */ ! 333: #define MSG_EOR 0x8 /* data completes record */ ! 334: #define MSG_TRUNC 0x10 /* data discarded before delivery */ ! 335: #define MSG_CTRUNC 0x20 /* control data lost before delivery */ ! 336: #define MSG_WAITALL 0x40 /* wait for full request or error */ ! 337: #define MSG_DONTWAIT 0x80 /* this message should be nonblocking */ ! 338: #define MSG_EOF 0x100 /* data completes connection */ ! 339: #define MSG_FLUSH 0x400 /* Start of 'hold' seq; dump so_temp */ ! 340: #define MSG_HOLD 0x800 /* Hold frag in so_temp */ ! 341: #define MSG_SEND 0x1000 /* Send the packet in so_temp */ ! 342: #define MSG_HAVEMORE 0x2000 /* Data ready to be read */ ! 343: #define MSG_RCVMORE 0x4000 /* Data remains in current pkt */ ! 344: #define MSG_COMPAT 0x8000 /* used in sendit() */ ! 345: ! 346: /* ! 347: * Header for ancillary data objects in msg_control buffer. ! 348: * Used for additional information with/about a datagram ! 349: * not expressible by flags. The format is a sequence ! 350: * of message elements headed by cmsghdr structures. ! 351: */ ! 352: struct cmsghdr { ! 353: u_int cmsg_len; /* data byte count, including hdr */ ! 354: int cmsg_level; /* originating protocol */ ! 355: int cmsg_type; /* protocol-specific type */ ! 356: /* followed by u_char cmsg_data[]; */ ! 357: }; ! 358: ! 359: /* given pointer to struct cmsghdr, return pointer to data */ ! 360: #define CMSG_DATA(cmsg) ((u_char *)((cmsg) + 1)) ! 361: ! 362: /* Alignment requirement for CMSG struct manipulation. ! 363: * This is different from ALIGN() defined in ARCH/include/param.h. ! 364: * XXX think again carefully about architecture dependencies. ! 365: */ ! 366: #define CMSG_ALIGN(n) (((n) + 3) & ~3) ! 367: ! 368: /* given pointer to struct cmsghdr, return pointer to next cmsghdr */ ! 369: #define CMSG_NXTHDR(mhdr, cmsg) \ ! 370: (((caddr_t)(cmsg) + (cmsg)->cmsg_len + sizeof(struct cmsghdr) > \ ! 371: (mhdr)->msg_control + (mhdr)->msg_controllen) ? \ ! 372: (struct cmsghdr *)NULL : \ ! 373: (struct cmsghdr *)((caddr_t)(cmsg) + CMSG_ALIGN((cmsg)->cmsg_len))) ! 374: ! 375: #define CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control) ! 376: ! 377: #define CMSG_SPACE(l) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(l)) ! 378: #define CMSG_LEN(l) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (l)) ! 379: ! 380: /* "Socket"-level control message types: */ ! 381: #define SCM_RIGHTS 0x01 /* access rights (array of int) */ ! 382: #define SCM_TIMESTAMP 0x02 /* timestamp (struct timeval) */ ! 383: #define SCM_CREDS 0x03 /* process creds (struct cmsgcred) */ ! 384: ! 385: /* ! 386: * 4.3 compat sockaddr, move to compat file later ! 387: */ ! 388: struct osockaddr { ! 389: u_short sa_family; /* address family */ ! 390: char sa_data[14]; /* up to 14 bytes of direct address */ ! 391: }; ! 392: ! 393: /* ! 394: * 4.3-compat message header (move to compat file later). ! 395: */ ! 396: struct omsghdr { ! 397: caddr_t msg_name; /* optional address */ ! 398: int msg_namelen; /* size of address */ ! 399: struct iovec *msg_iov; /* scatter/gather array */ ! 400: int msg_iovlen; /* # elements in msg_iov */ ! 401: caddr_t msg_accrights; /* access rights sent/received */ ! 402: int msg_accrightslen; ! 403: }; ! 404: ! 405: /* ! 406: * howto arguments for shutdown(2), specified by Posix.1g. ! 407: */ ! 408: #define SHUT_RD 0 /* shut down the reading side */ ! 409: #define SHUT_WR 1 /* shut down the writing side */ ! 410: #define SHUT_RDWR 2 /* shut down both sides */ ! 411: ! 412: #if SENDFILE ! 413: /* ! 414: * sendfile(2) header/trailer struct ! 415: */ ! 416: struct sf_hdtr { ! 417: struct iovec *headers; /* pointer to an array of header struct iovec's */ ! 418: int hdr_cnt; /* number of header iovec's */ ! 419: struct iovec *trailers; /* pointer to an array of trailer struct iovec's */ ! 420: int trl_cnt; /* number of trailer iovec's */ ! 421: }; ! 422: #endif ! 423: ! 424: #ifndef KERNEL ! 425: ! 426: #include <sys/cdefs.h> ! 427: ! 428: __BEGIN_DECLS ! 429: int accept __P((int, struct sockaddr *, int *)); ! 430: int bind __P((int, const struct sockaddr *, int)); ! 431: int connect __P((int, const struct sockaddr *, int)); ! 432: int getpeername __P((int, struct sockaddr *, int *)); ! 433: int getsockname __P((int, struct sockaddr *, int *)); ! 434: int getsockopt __P((int, int, int, void *, int *)); ! 435: int listen __P((int, int)); ! 436: ssize_t recv __P((int, void *, size_t, int)); ! 437: ssize_t recvfrom __P((int, void *, size_t, int, struct sockaddr *, int *)); ! 438: ssize_t recvmsg __P((int, struct msghdr *, int)); ! 439: ssize_t send __P((int, const void *, size_t, int)); ! 440: ssize_t sendto __P((int, const void *, ! 441: size_t, int, const struct sockaddr *, int)); ! 442: ssize_t sendmsg __P((int, const struct msghdr *, int)); ! 443: #if SENDFILE ! 444: int sendfile __P((int, int, off_t, size_t, struct sf_hdtr *, off_t *, int)); ! 445: #endif ! 446: int setsockopt __P((int, int, int, const void *, int)); ! 447: int shutdown __P((int, int)); ! 448: int socket __P((int, int, int)); ! 449: int socketpair __P((int, int, int, int *)); ! 450: __END_DECLS ! 451: ! 452: #endif /* !KERNEL */ ! 453: #endif /* !_SYS_SOCKET_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.