123438Smckusick /* 235796Ssklower * Copyright (c) 1982,1985,1986,1988 Regents of the University of California. 333186Sbostic * All rights reserved. 423438Smckusick * 544523Sbostic * %sccs.include.redist.c% 633186Sbostic * 7*46972Sbostic * @(#)socket.h 7.12 (Berkeley) 03/04/91 823438Smckusick */ 94658Swnj 104658Swnj /* 1112787Ssam * Definitions related to sockets: types, address families, options. 124658Swnj */ 134892Swnj 144892Swnj /* 1512787Ssam * Types 164892Swnj */ 174930Swnj #define SOCK_STREAM 1 /* stream socket */ 184930Swnj #define SOCK_DGRAM 2 /* datagram socket */ 194930Swnj #define SOCK_RAW 3 /* raw-protocol interface */ 204930Swnj #define SOCK_RDM 4 /* reliably-delivered message */ 2112787Ssam #define SOCK_SEQPACKET 5 /* sequenced packet stream */ 224658Swnj 234812Swnj /* 244812Swnj * Option flags per-socket. 254812Swnj */ 2627192Skarels #define SO_DEBUG 0x0001 /* turn on debugging info recording */ 2727192Skarels #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ 2827192Skarels #define SO_REUSEADDR 0x0004 /* allow local address reuse */ 2927192Skarels #define SO_KEEPALIVE 0x0008 /* keep connections alive */ 3027192Skarels #define SO_DONTROUTE 0x0010 /* just use interface addresses */ 3127192Skarels #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ 3227192Skarels #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ 3327192Skarels #define SO_LINGER 0x0080 /* linger on close if data present */ 3427192Skarels #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ 354930Swnj 364930Swnj /* 3717552Skarels * Additional options, not kept in so_options. 3817552Skarels */ 3917552Skarels #define SO_SNDBUF 0x1001 /* send buffer size */ 4017552Skarels #define SO_RCVBUF 0x1002 /* receive buffer size */ 4117552Skarels #define SO_SNDLOWAT 0x1003 /* send low-water mark */ 4217552Skarels #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ 4317552Skarels #define SO_SNDTIMEO 0x1005 /* send timeout */ 4417552Skarels #define SO_RCVTIMEO 0x1006 /* receive timeout */ 4524825Skarels #define SO_ERROR 0x1007 /* get error status and clear */ 4625503Skarels #define SO_TYPE 0x1008 /* get socket type */ 4717552Skarels 4817552Skarels /* 4917160Ssam * Structure used for manipulating linger option. 5017052Skarels */ 5117160Ssam struct linger { 5217160Ssam int l_onoff; /* option on/off */ 5317160Ssam int l_linger; /* linger time */ 5417160Ssam }; 5517052Skarels 5617052Skarels /* 5717160Ssam * Level number for (get/set)sockopt() to apply to socket itself. 5817160Ssam */ 5917160Ssam #define SOL_SOCKET 0xffff /* options for socket level */ 6017160Ssam 6117160Ssam /* 6212787Ssam * Address families. 634930Swnj */ 6412787Ssam #define AF_UNSPEC 0 /* unspecified */ 6512787Ssam #define AF_UNIX 1 /* local to host (pipes, portals) */ 6612787Ssam #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 6712787Ssam #define AF_IMPLINK 3 /* arpanet imp addresses */ 6812787Ssam #define AF_PUP 4 /* pup protocols: e.g. BSP */ 6912787Ssam #define AF_CHAOS 5 /* mit CHAOS protocols */ 7012787Ssam #define AF_NS 6 /* XEROX NS protocols */ 7136353Ssklower #define AF_ISO 7 /* ISO protocols */ 7240764Skarels #define AF_OSI AF_ISO 7312787Ssam #define AF_ECMA 8 /* european computer manufacturers */ 7412787Ssam #define AF_DATAKIT 9 /* datakit protocols */ 7512787Ssam #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 7612787Ssam #define AF_SNA 11 /* IBM SNA */ 7723751Skarels #define AF_DECnet 12 /* DECnet */ 7840764Skarels #define AF_DLI 13 /* DEC Direct data link interface */ 7923751Skarels #define AF_LAT 14 /* LAT */ 8023751Skarels #define AF_HYLINK 15 /* NSC Hyperchannel */ 8128881Skarels #define AF_APPLETALK 16 /* Apple Talk */ 8236353Ssklower #define AF_ROUTE 17 /* Internal Routing Protocol */ 8340764Skarels #define AF_LINK 18 /* Link layer interface */ 8440764Skarels #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */ 854930Swnj 8640764Skarels #define AF_MAX 20 874930Swnj 884930Swnj /* 8912787Ssam * Structure used by kernel to store most 9012787Ssam * addresses. 914930Swnj */ 924930Swnj struct sockaddr { 9335796Ssklower u_char sa_len; /* total length */ 9435796Ssklower u_char sa_family; /* address family */ 9536353Ssklower char sa_data[14]; /* actually longer; address value */ 9635796Ssklower }; 974930Swnj 984930Swnj /* 9912787Ssam * Structure used by kernel to pass protocol 10012787Ssam * information in raw sockets. 1014930Swnj */ 10212787Ssam struct sockproto { 10312787Ssam u_short sp_family; /* address family */ 10412787Ssam u_short sp_protocol; /* protocol */ 10512787Ssam }; 1066620Ssam 10712787Ssam /* 10812787Ssam * Protocol families, same as address families for now. 10912787Ssam */ 11012787Ssam #define PF_UNSPEC AF_UNSPEC 11112787Ssam #define PF_UNIX AF_UNIX 11212787Ssam #define PF_INET AF_INET 11312787Ssam #define PF_IMPLINK AF_IMPLINK 11412787Ssam #define PF_PUP AF_PUP 11512787Ssam #define PF_CHAOS AF_CHAOS 11612787Ssam #define PF_NS AF_NS 11736353Ssklower #define PF_ISO AF_ISO 11840764Skarels #define PF_OSI AF_ISO 11912787Ssam #define PF_ECMA AF_ECMA 12012787Ssam #define PF_DATAKIT AF_DATAKIT 12112787Ssam #define PF_CCITT AF_CCITT 12212787Ssam #define PF_SNA AF_SNA 12323751Skarels #define PF_DECnet AF_DECnet 12423751Skarels #define PF_DLI AF_DLI 12523751Skarels #define PF_LAT AF_LAT 12623751Skarels #define PF_HYLINK AF_HYLINK 12728881Skarels #define PF_APPLETALK AF_APPLETALK 12836353Ssklower #define PF_ROUTE AF_ROUTE 12940764Skarels #define PF_LINK AF_LINK 13040764Skarels #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */ 1318274Sroot 13223751Skarels #define PF_MAX AF_MAX 13312787Ssam 13412787Ssam /* 13512787Ssam * Maximum queue length specifiable by listen. 13612787Ssam */ 13712787Ssam #define SOMAXCONN 5 13812787Ssam 13912787Ssam /* 14012787Ssam * Message header for recvmsg and sendmsg calls. 14135796Ssklower * Used value-result for recvmsg, value only for sendmsg. 14212787Ssam */ 14312787Ssam struct msghdr { 14412787Ssam caddr_t msg_name; /* optional address */ 14542464Ssklower u_int msg_namelen; /* size of address */ 14612787Ssam struct iovec *msg_iov; /* scatter/gather array */ 14742464Ssklower u_int msg_iovlen; /* # elements in msg_iov */ 14840764Skarels caddr_t msg_control; /* ancillary data, see below */ 14942464Ssklower u_int msg_controllen; /* ancillary data buffer len */ 15035796Ssklower int msg_flags; /* flags on received message */ 15112787Ssam }; 15212787Ssam 15312787Ssam #define MSG_OOB 0x1 /* process out-of-band data */ 15412787Ssam #define MSG_PEEK 0x2 /* peek at incoming message */ 15512787Ssam #define MSG_DONTROUTE 0x4 /* send without using routing tables */ 15635796Ssklower #define MSG_EOR 0x8 /* data completes record */ 15735796Ssklower #define MSG_TRUNC 0x10 /* data discarded before delivery */ 15835796Ssklower #define MSG_CTRUNC 0x20 /* control data lost before delivery */ 15940764Skarels #define MSG_WAITALL 0x40 /* wait for full request or error */ 16012787Ssam 16135796Ssklower /* 16240764Skarels * Header for ancillary data objects in msg_control buffer. 16340764Skarels * Used for additional information with/about a datagram 16440764Skarels * not expressible by flags. The format is a sequence 16540764Skarels * of message elements headed by cmsghdr structures. 16640764Skarels */ 16740764Skarels struct cmsghdr { 16840764Skarels u_int cmsg_len; /* data byte count, including hdr */ 16942464Ssklower int cmsg_level; /* originating protocol */ 17042464Ssklower int cmsg_type; /* protocol-specific type */ 17140764Skarels /* followed by u_char cmsg_data[]; */ 17240764Skarels }; 17340764Skarels 17440764Skarels /* given pointer to struct adatahdr, return pointer to data */ 17540764Skarels #define CMSG_DATA(cmsg) ((u_char *)((cmsg) + 1)) 17640764Skarels 17740764Skarels /* given pointer to struct adatahdr, return pointer to next adatahdr */ 17840764Skarels #define CMSG_NXTHDR(mhdr, cmsg) \ 17940764Skarels (((caddr_t)(cmsg) + (cmsg)->cmsg_len + sizeof(struct cmsghdr) > \ 18040764Skarels (mhdr)->msg_control + (mhdr)->msg_controllen) ? \ 18140764Skarels (struct cmsghdr *)NULL : \ 18240764Skarels (struct cmsghdr *)((caddr_t)(cmsg) + ALIGN((cmsg)->cmsg_len))) 18340764Skarels 18440764Skarels #define CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control) 18540764Skarels 18640764Skarels /* "Socket"-level control message types: */ 18740764Skarels #define SCM_RIGHTS 0x01 /* access rights (array of int) */ 18840764Skarels 18940764Skarels /* 19040764Skarels * 4.3 compat sockaddr, move to compat file later 19140764Skarels */ 19240764Skarels struct osockaddr { 19340764Skarels u_short sa_family; /* address family */ 19440764Skarels char sa_data[14]; /* up to 14 bytes of direct address */ 19540764Skarels }; 19640764Skarels 19740764Skarels /* 19835796Ssklower * 4.3-compat message header (move to compat file later). 19935796Ssklower */ 20035796Ssklower struct omsghdr { 20135796Ssklower caddr_t msg_name; /* optional address */ 20235796Ssklower int msg_namelen; /* size of address */ 20335796Ssklower struct iovec *msg_iov; /* scatter/gather array */ 20435796Ssklower int msg_iovlen; /* # elements in msg_iov */ 20535796Ssklower caddr_t msg_accrights; /* access rights sent/received */ 20635796Ssklower int msg_accrightslen; 20735796Ssklower }; 20846577Sdonn 20946577Sdonn #ifndef KERNEL 21046577Sdonn 21146577Sdonn #include <sys/cdefs.h> 21246577Sdonn 21346577Sdonn __BEGIN_DECLS 21446577Sdonn int accept __P((int, struct sockaddr *, int *)); 21546577Sdonn int bind __P((int, const struct sockaddr *, int)); 21646577Sdonn int connect __P((int, const struct sockaddr *, int)); 21746577Sdonn int getpeername __P((int, struct sockaddr *, int *)); 21846577Sdonn int getsockname __P((int, struct sockaddr *, int *)); 21946577Sdonn int getsockopt __P((int, int, int, void *, int *)); 22046577Sdonn int listen __P((int, int)); 22146577Sdonn int recv __P((int, void *, int, int)); 22246577Sdonn int recvfrom __P((int, void *, int, int, 22346577Sdonn struct sockaddr *, int *)); 22446577Sdonn int recvmsg __P((int, const struct msghdr *, int)); 22546577Sdonn int send __P((int, const void *, int, int)); 226*46972Sbostic int sendto __P((int, const void *, int, int, const struct sockaddr *, int)); 22746577Sdonn int sendmsg __P((int, const struct msghdr *, int)); 22846577Sdonn int setsockopt __P((int, int, int, const void *, int)); 22946577Sdonn int shutdown __P((int, int)); 23046577Sdonn int socket __P((int, int, int)); 23146577Sdonn int socketpair __P((int, int, int, int *)); 23246577Sdonn __END_DECLS 23346577Sdonn 23446577Sdonn #endif /* !KERNEL */ 235