1*0Sstevel@tonic-gate /* 2*0Sstevel@tonic-gate * Copyright 1989 Sun Microsystems, Inc. All rights reserved. 3*0Sstevel@tonic-gate * Use is subject to license terms. 4*0Sstevel@tonic-gate */ 5*0Sstevel@tonic-gate 6*0Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 7*0Sstevel@tonic-gate 8*0Sstevel@tonic-gate /* 9*0Sstevel@tonic-gate * Copyright (c) 1982, 1985, 1986 Regents of the University of California. 10*0Sstevel@tonic-gate * All rights reserved. The Berkeley software License Agreement 11*0Sstevel@tonic-gate * specifies the terms and conditions for redistribution. 12*0Sstevel@tonic-gate */ 13*0Sstevel@tonic-gate 14*0Sstevel@tonic-gate #ifndef _sys_socket_h 15*0Sstevel@tonic-gate #define _sys_socket_h 16*0Sstevel@tonic-gate 17*0Sstevel@tonic-gate /* 18*0Sstevel@tonic-gate * Definitions related to sockets: types, address families, options. 19*0Sstevel@tonic-gate */ 20*0Sstevel@tonic-gate 21*0Sstevel@tonic-gate /* 22*0Sstevel@tonic-gate * Types 23*0Sstevel@tonic-gate */ 24*0Sstevel@tonic-gate #define SOCK_STREAM 1 /* stream socket */ 25*0Sstevel@tonic-gate #define SOCK_DGRAM 2 /* datagram socket */ 26*0Sstevel@tonic-gate #define SOCK_RAW 3 /* raw-protocol interface */ 27*0Sstevel@tonic-gate #define SOCK_RDM 4 /* reliably-delivered message */ 28*0Sstevel@tonic-gate #define SOCK_SEQPACKET 5 /* sequenced packet stream */ 29*0Sstevel@tonic-gate 30*0Sstevel@tonic-gate /* 31*0Sstevel@tonic-gate * Option flags per-socket. 32*0Sstevel@tonic-gate */ 33*0Sstevel@tonic-gate #define SO_DEBUG 0x0001 /* turn on debugging info recording */ 34*0Sstevel@tonic-gate #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ 35*0Sstevel@tonic-gate #define SO_REUSEADDR 0x0004 /* allow local address reuse */ 36*0Sstevel@tonic-gate #define SO_KEEPALIVE 0x0008 /* keep connections alive */ 37*0Sstevel@tonic-gate #define SO_DONTROUTE 0x0010 /* just use interface addresses */ 38*0Sstevel@tonic-gate #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ 39*0Sstevel@tonic-gate #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ 40*0Sstevel@tonic-gate #define SO_LINGER 0x0080 /* linger on close if data present */ 41*0Sstevel@tonic-gate #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ 42*0Sstevel@tonic-gate /* 43*0Sstevel@tonic-gate * N.B.: The following definition is present only for compatibility 44*0Sstevel@tonic-gate * with release 3.0. It will disappear in later releases. 45*0Sstevel@tonic-gate */ 46*0Sstevel@tonic-gate #define SO_DONTLINGER (~SO_LINGER) /* ~SO_LINGER */ 47*0Sstevel@tonic-gate 48*0Sstevel@tonic-gate /* 49*0Sstevel@tonic-gate * Additional options, not kept in so_options. 50*0Sstevel@tonic-gate */ 51*0Sstevel@tonic-gate #define SO_SNDBUF 0x1001 /* send buffer size */ 52*0Sstevel@tonic-gate #define SO_RCVBUF 0x1002 /* receive buffer size */ 53*0Sstevel@tonic-gate #define SO_SNDLOWAT 0x1003 /* send low-water mark */ 54*0Sstevel@tonic-gate #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ 55*0Sstevel@tonic-gate #define SO_SNDTIMEO 0x1005 /* send timeout */ 56*0Sstevel@tonic-gate #define SO_RCVTIMEO 0x1006 /* receive timeout */ 57*0Sstevel@tonic-gate #define SO_ERROR 0x1007 /* get error status and clear */ 58*0Sstevel@tonic-gate #define SO_TYPE 0x1008 /* get socket type */ 59*0Sstevel@tonic-gate 60*0Sstevel@tonic-gate /* 61*0Sstevel@tonic-gate * Structure used for manipulating linger option. 62*0Sstevel@tonic-gate */ 63*0Sstevel@tonic-gate struct linger { 64*0Sstevel@tonic-gate int l_onoff; /* option on/off */ 65*0Sstevel@tonic-gate int l_linger; /* linger time */ 66*0Sstevel@tonic-gate }; 67*0Sstevel@tonic-gate 68*0Sstevel@tonic-gate /* 69*0Sstevel@tonic-gate * Level number for (get/set)sockopt() to apply to socket itself. 70*0Sstevel@tonic-gate */ 71*0Sstevel@tonic-gate #define SOL_SOCKET 0xffff /* options for socket level */ 72*0Sstevel@tonic-gate 73*0Sstevel@tonic-gate /* 74*0Sstevel@tonic-gate * Address families. 75*0Sstevel@tonic-gate */ 76*0Sstevel@tonic-gate #define AF_UNSPEC 0 /* unspecified */ 77*0Sstevel@tonic-gate #define AF_UNIX 1 /* local to host (pipes, portals) */ 78*0Sstevel@tonic-gate #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 79*0Sstevel@tonic-gate #define AF_IMPLINK 3 /* arpanet imp addresses */ 80*0Sstevel@tonic-gate #define AF_PUP 4 /* pup protocols: e.g. BSP */ 81*0Sstevel@tonic-gate #define AF_CHAOS 5 /* mit CHAOS protocols */ 82*0Sstevel@tonic-gate #define AF_NS 6 /* XEROX NS protocols */ 83*0Sstevel@tonic-gate #define AF_NBS 7 /* nbs protocols */ 84*0Sstevel@tonic-gate #define AF_ECMA 8 /* european computer manufacturers */ 85*0Sstevel@tonic-gate #define AF_DATAKIT 9 /* datakit protocols */ 86*0Sstevel@tonic-gate #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 87*0Sstevel@tonic-gate #define AF_SNA 11 /* IBM SNA */ 88*0Sstevel@tonic-gate #define AF_DECnet 12 /* DECnet */ 89*0Sstevel@tonic-gate #define AF_DLI 13 /* Direct data link interface */ 90*0Sstevel@tonic-gate #define AF_LAT 14 /* LAT */ 91*0Sstevel@tonic-gate #define AF_HYLINK 15 /* NSC Hyperchannel */ 92*0Sstevel@tonic-gate #define AF_APPLETALK 16 /* Apple Talk */ 93*0Sstevel@tonic-gate 94*0Sstevel@tonic-gate #define AF_NIT 17 /* Network Interface Tap */ 95*0Sstevel@tonic-gate #define AF_802 18 /* IEEE 802.2, also ISO 8802 */ 96*0Sstevel@tonic-gate #define AF_OSI 19 /* umbrella for all families used 97*0Sstevel@tonic-gate * by OSI (e.g. protosw lookup) */ 98*0Sstevel@tonic-gate #define AF_X25 20 /* CCITT X.25 in particular */ 99*0Sstevel@tonic-gate #define AF_OSINET 21 /* AFI = 47, IDI = 4 */ 100*0Sstevel@tonic-gate #define AF_GOSIP 22 /* U.S. Government OSI */ 101*0Sstevel@tonic-gate 102*0Sstevel@tonic-gate #define AF_MAX 21 103*0Sstevel@tonic-gate 104*0Sstevel@tonic-gate /* 105*0Sstevel@tonic-gate * Structure used by kernel to store most 106*0Sstevel@tonic-gate * addresses. 107*0Sstevel@tonic-gate */ 108*0Sstevel@tonic-gate struct sockaddr { 109*0Sstevel@tonic-gate u_short sa_family; /* address family */ 110*0Sstevel@tonic-gate char sa_data[14]; /* up to 14 bytes of direct address */ 111*0Sstevel@tonic-gate }; 112*0Sstevel@tonic-gate 113*0Sstevel@tonic-gate /* 114*0Sstevel@tonic-gate * Structure used by kernel to pass protocol 115*0Sstevel@tonic-gate * information in raw sockets. 116*0Sstevel@tonic-gate */ 117*0Sstevel@tonic-gate struct sockproto { 118*0Sstevel@tonic-gate u_short sp_family; /* address family */ 119*0Sstevel@tonic-gate u_short sp_protocol; /* protocol */ 120*0Sstevel@tonic-gate }; 121*0Sstevel@tonic-gate 122*0Sstevel@tonic-gate /* 123*0Sstevel@tonic-gate * Protocol families, same as address families for now. 124*0Sstevel@tonic-gate */ 125*0Sstevel@tonic-gate #define PF_UNSPEC AF_UNSPEC 126*0Sstevel@tonic-gate #define PF_UNIX AF_UNIX 127*0Sstevel@tonic-gate #define PF_INET AF_INET 128*0Sstevel@tonic-gate #define PF_IMPLINK AF_IMPLINK 129*0Sstevel@tonic-gate #define PF_PUP AF_PUP 130*0Sstevel@tonic-gate #define PF_CHAOS AF_CHAOS 131*0Sstevel@tonic-gate #define PF_NS AF_NS 132*0Sstevel@tonic-gate #define PF_NBS AF_NBS 133*0Sstevel@tonic-gate #define PF_ECMA AF_ECMA 134*0Sstevel@tonic-gate #define PF_DATAKIT AF_DATAKIT 135*0Sstevel@tonic-gate #define PF_CCITT AF_CCITT 136*0Sstevel@tonic-gate #define PF_SNA AF_SNA 137*0Sstevel@tonic-gate #define PF_DECnet AF_DECnet 138*0Sstevel@tonic-gate #define PF_DLI AF_DLI 139*0Sstevel@tonic-gate #define PF_LAT AF_LAT 140*0Sstevel@tonic-gate #define PF_HYLINK AF_HYLINK 141*0Sstevel@tonic-gate #define PF_APPLETALK AF_APPLETALK 142*0Sstevel@tonic-gate #define PF_NIT AF_NIT 143*0Sstevel@tonic-gate #define PF_802 AF_802 144*0Sstevel@tonic-gate #define PF_OSI AF_OSI 145*0Sstevel@tonic-gate #define PF_X25 AF_X25 146*0Sstevel@tonic-gate #define PF_OSINET AF_OSINET 147*0Sstevel@tonic-gate #define PF_GOSIP AF_GOSIP 148*0Sstevel@tonic-gate 149*0Sstevel@tonic-gate #define PF_MAX AF_MAX 150*0Sstevel@tonic-gate 151*0Sstevel@tonic-gate /* 152*0Sstevel@tonic-gate * Maximum queue length specifiable by listen. 153*0Sstevel@tonic-gate */ 154*0Sstevel@tonic-gate #define SOMAXCONN 5 155*0Sstevel@tonic-gate 156*0Sstevel@tonic-gate /* 157*0Sstevel@tonic-gate * Message header for recvmsg and sendmsg calls. 158*0Sstevel@tonic-gate */ 159*0Sstevel@tonic-gate struct msghdr { 160*0Sstevel@tonic-gate caddr_t msg_name; /* optional address */ 161*0Sstevel@tonic-gate int msg_namelen; /* size of address */ 162*0Sstevel@tonic-gate struct iovec *msg_iov; /* scatter/gather array */ 163*0Sstevel@tonic-gate int msg_iovlen; /* # elements in msg_iov */ 164*0Sstevel@tonic-gate caddr_t msg_accrights; /* access rights sent/received */ 165*0Sstevel@tonic-gate int msg_accrightslen; 166*0Sstevel@tonic-gate }; 167*0Sstevel@tonic-gate 168*0Sstevel@tonic-gate #define MSG_OOB 0x1 /* process out-of-band data */ 169*0Sstevel@tonic-gate #define MSG_PEEK 0x2 /* peek at incoming message */ 170*0Sstevel@tonic-gate #define MSG_DONTROUTE 0x4 /* send without using routing tables */ 171*0Sstevel@tonic-gate 172*0Sstevel@tonic-gate #define MSG_MAXIOVLEN 16 173*0Sstevel@tonic-gate 174*0Sstevel@tonic-gate #endif /*!_sys_socket_h*/ 175