123438Smckusick /* 223438Smckusick * Copyright (c) 1982 Regents of the University of California. 323438Smckusick * All rights reserved. The Berkeley software License Agreement 423438Smckusick * specifies the terms and conditions for redistribution. 523438Smckusick * 6*25503Skarels * @(#)socket.h 6.9 (Berkeley) 11/19/85 723438Smckusick */ 84658Swnj 94658Swnj /* 1012787Ssam * Definitions related to sockets: types, address families, options. 114658Swnj */ 124892Swnj 134892Swnj /* 1412787Ssam * Types 154892Swnj */ 164930Swnj #define SOCK_STREAM 1 /* stream socket */ 174930Swnj #define SOCK_DGRAM 2 /* datagram socket */ 184930Swnj #define SOCK_RAW 3 /* raw-protocol interface */ 194930Swnj #define SOCK_RDM 4 /* reliably-delivered message */ 2012787Ssam #define SOCK_SEQPACKET 5 /* sequenced packet stream */ 214658Swnj 224812Swnj /* 234812Swnj * Option flags per-socket. 244812Swnj */ 254812Swnj #define SO_DEBUG 0x01 /* turn on debugging info recording */ 2612787Ssam #define SO_ACCEPTCONN 0x02 /* socket has had listen() */ 2712787Ssam #define SO_REUSEADDR 0x04 /* allow local address reuse */ 286215Swnj #define SO_KEEPALIVE 0x08 /* keep connections alive */ 297132Swnj #define SO_DONTROUTE 0x10 /* just use interface addresses */ 3017052Skarels #define SO_BROADCAST 0x20 /* permit sending of broadcast msgs */ 3110209Ssam #define SO_USELOOPBACK 0x40 /* bypass hardware when possible */ 3210597Ssam #define SO_LINGER 0x80 /* linger on close if data present */ 334930Swnj 344930Swnj /* 3517552Skarels * Additional options, not kept in so_options. 3617552Skarels */ 3717552Skarels #define SO_SNDBUF 0x1001 /* send buffer size */ 3817552Skarels #define SO_RCVBUF 0x1002 /* receive buffer size */ 3917552Skarels #define SO_SNDLOWAT 0x1003 /* send low-water mark */ 4017552Skarels #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ 4117552Skarels #define SO_SNDTIMEO 0x1005 /* send timeout */ 4217552Skarels #define SO_RCVTIMEO 0x1006 /* receive timeout */ 4324825Skarels #define SO_ERROR 0x1007 /* get error status and clear */ 44*25503Skarels #define SO_TYPE 0x1008 /* get socket type */ 4517552Skarels 4617552Skarels /* 4717160Ssam * Structure used for manipulating linger option. 4817052Skarels */ 4917160Ssam struct linger { 5017160Ssam int l_onoff; /* option on/off */ 5117160Ssam int l_linger; /* linger time */ 5217160Ssam }; 5317052Skarels 5417052Skarels /* 5517160Ssam * Level number for (get/set)sockopt() to apply to socket itself. 5617160Ssam */ 5717160Ssam #define SOL_SOCKET 0xffff /* options for socket level */ 5817160Ssam 5917160Ssam /* 6012787Ssam * Address families. 614930Swnj */ 6212787Ssam #define AF_UNSPEC 0 /* unspecified */ 6312787Ssam #define AF_UNIX 1 /* local to host (pipes, portals) */ 6412787Ssam #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 6512787Ssam #define AF_IMPLINK 3 /* arpanet imp addresses */ 6612787Ssam #define AF_PUP 4 /* pup protocols: e.g. BSP */ 6712787Ssam #define AF_CHAOS 5 /* mit CHAOS protocols */ 6812787Ssam #define AF_NS 6 /* XEROX NS protocols */ 6912787Ssam #define AF_NBS 7 /* nbs protocols */ 7012787Ssam #define AF_ECMA 8 /* european computer manufacturers */ 7112787Ssam #define AF_DATAKIT 9 /* datakit protocols */ 7212787Ssam #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 7312787Ssam #define AF_SNA 11 /* IBM SNA */ 7423751Skarels #define AF_DECnet 12 /* DECnet */ 7523751Skarels #define AF_DLI 13 /* Direct data link interface */ 7623751Skarels #define AF_LAT 14 /* LAT */ 7723751Skarels #define AF_HYLINK 15 /* NSC Hyperchannel */ 784930Swnj 7923751Skarels #define AF_MAX 16 804930Swnj 814930Swnj /* 8212787Ssam * Structure used by kernel to store most 8312787Ssam * addresses. 844930Swnj */ 854930Swnj struct sockaddr { 8612508Ssam u_short sa_family; /* address family */ 874930Swnj char sa_data[14]; /* up to 14 bytes of direct address */ 884930Swnj }; 894930Swnj 904930Swnj /* 9112787Ssam * Structure used by kernel to pass protocol 9212787Ssam * information in raw sockets. 934930Swnj */ 9412787Ssam struct sockproto { 9512787Ssam u_short sp_family; /* address family */ 9612787Ssam u_short sp_protocol; /* protocol */ 9712787Ssam }; 986620Ssam 9912787Ssam /* 10012787Ssam * Protocol families, same as address families for now. 10112787Ssam */ 10212787Ssam #define PF_UNSPEC AF_UNSPEC 10312787Ssam #define PF_UNIX AF_UNIX 10412787Ssam #define PF_INET AF_INET 10512787Ssam #define PF_IMPLINK AF_IMPLINK 10612787Ssam #define PF_PUP AF_PUP 10712787Ssam #define PF_CHAOS AF_CHAOS 10812787Ssam #define PF_NS AF_NS 10912787Ssam #define PF_NBS AF_NBS 11012787Ssam #define PF_ECMA AF_ECMA 11112787Ssam #define PF_DATAKIT AF_DATAKIT 11212787Ssam #define PF_CCITT AF_CCITT 11312787Ssam #define PF_SNA AF_SNA 11423751Skarels #define PF_DECnet AF_DECnet 11523751Skarels #define PF_DLI AF_DLI 11623751Skarels #define PF_LAT AF_LAT 11723751Skarels #define PF_HYLINK AF_HYLINK 1188274Sroot 11923751Skarels #define PF_MAX AF_MAX 12012787Ssam 12112787Ssam /* 12212787Ssam * Maximum queue length specifiable by listen. 12312787Ssam */ 12412787Ssam #define SOMAXCONN 5 12512787Ssam 12612787Ssam /* 12712787Ssam * Message header for recvmsg and sendmsg calls. 12812787Ssam */ 12912787Ssam struct msghdr { 13012787Ssam caddr_t msg_name; /* optional address */ 13112787Ssam int msg_namelen; /* size of address */ 13212787Ssam struct iovec *msg_iov; /* scatter/gather array */ 13312787Ssam int msg_iovlen; /* # elements in msg_iov */ 13412787Ssam caddr_t msg_accrights; /* access rights sent/received */ 13512787Ssam int msg_accrightslen; 13612787Ssam }; 13712787Ssam 13812787Ssam #define MSG_OOB 0x1 /* process out-of-band data */ 13912787Ssam #define MSG_PEEK 0x2 /* peek at incoming message */ 14012787Ssam #define MSG_DONTROUTE 0x4 /* send without using routing tables */ 14112787Ssam 14212787Ssam #define MSG_MAXIOVLEN 16 143