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*24825Skarels * @(#)socket.h 6.8 (Berkeley) 09/16/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 */ 43*24825Skarels #define SO_ERROR 0x1007 /* get error status and clear */ 4417552Skarels 4517552Skarels /* 4617160Ssam * Structure used for manipulating linger option. 4717052Skarels */ 4817160Ssam struct linger { 4917160Ssam int l_onoff; /* option on/off */ 5017160Ssam int l_linger; /* linger time */ 5117160Ssam }; 5217052Skarels 5317052Skarels /* 5417160Ssam * Level number for (get/set)sockopt() to apply to socket itself. 5517160Ssam */ 5617160Ssam #define SOL_SOCKET 0xffff /* options for socket level */ 5717160Ssam 5817160Ssam /* 5912787Ssam * Address families. 604930Swnj */ 6112787Ssam #define AF_UNSPEC 0 /* unspecified */ 6212787Ssam #define AF_UNIX 1 /* local to host (pipes, portals) */ 6312787Ssam #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 6412787Ssam #define AF_IMPLINK 3 /* arpanet imp addresses */ 6512787Ssam #define AF_PUP 4 /* pup protocols: e.g. BSP */ 6612787Ssam #define AF_CHAOS 5 /* mit CHAOS protocols */ 6712787Ssam #define AF_NS 6 /* XEROX NS protocols */ 6812787Ssam #define AF_NBS 7 /* nbs protocols */ 6912787Ssam #define AF_ECMA 8 /* european computer manufacturers */ 7012787Ssam #define AF_DATAKIT 9 /* datakit protocols */ 7112787Ssam #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 7212787Ssam #define AF_SNA 11 /* IBM SNA */ 7323751Skarels #define AF_DECnet 12 /* DECnet */ 7423751Skarels #define AF_DLI 13 /* Direct data link interface */ 7523751Skarels #define AF_LAT 14 /* LAT */ 7623751Skarels #define AF_HYLINK 15 /* NSC Hyperchannel */ 774930Swnj 7823751Skarels #define AF_MAX 16 794930Swnj 804930Swnj /* 8112787Ssam * Structure used by kernel to store most 8212787Ssam * addresses. 834930Swnj */ 844930Swnj struct sockaddr { 8512508Ssam u_short sa_family; /* address family */ 864930Swnj char sa_data[14]; /* up to 14 bytes of direct address */ 874930Swnj }; 884930Swnj 894930Swnj /* 9012787Ssam * Structure used by kernel to pass protocol 9112787Ssam * information in raw sockets. 924930Swnj */ 9312787Ssam struct sockproto { 9412787Ssam u_short sp_family; /* address family */ 9512787Ssam u_short sp_protocol; /* protocol */ 9612787Ssam }; 976620Ssam 9812787Ssam /* 9912787Ssam * Protocol families, same as address families for now. 10012787Ssam */ 10112787Ssam #define PF_UNSPEC AF_UNSPEC 10212787Ssam #define PF_UNIX AF_UNIX 10312787Ssam #define PF_INET AF_INET 10412787Ssam #define PF_IMPLINK AF_IMPLINK 10512787Ssam #define PF_PUP AF_PUP 10612787Ssam #define PF_CHAOS AF_CHAOS 10712787Ssam #define PF_NS AF_NS 10812787Ssam #define PF_NBS AF_NBS 10912787Ssam #define PF_ECMA AF_ECMA 11012787Ssam #define PF_DATAKIT AF_DATAKIT 11112787Ssam #define PF_CCITT AF_CCITT 11212787Ssam #define PF_SNA AF_SNA 11323751Skarels #define PF_DECnet AF_DECnet 11423751Skarels #define PF_DLI AF_DLI 11523751Skarels #define PF_LAT AF_LAT 11623751Skarels #define PF_HYLINK AF_HYLINK 1178274Sroot 11823751Skarels #define PF_MAX AF_MAX 11912787Ssam 12012787Ssam /* 12112787Ssam * Maximum queue length specifiable by listen. 12212787Ssam */ 12312787Ssam #define SOMAXCONN 5 12412787Ssam 12512787Ssam /* 12612787Ssam * Message header for recvmsg and sendmsg calls. 12712787Ssam */ 12812787Ssam struct msghdr { 12912787Ssam caddr_t msg_name; /* optional address */ 13012787Ssam int msg_namelen; /* size of address */ 13112787Ssam struct iovec *msg_iov; /* scatter/gather array */ 13212787Ssam int msg_iovlen; /* # elements in msg_iov */ 13312787Ssam caddr_t msg_accrights; /* access rights sent/received */ 13412787Ssam int msg_accrightslen; 13512787Ssam }; 13612787Ssam 13712787Ssam #define MSG_OOB 0x1 /* process out-of-band data */ 13812787Ssam #define MSG_PEEK 0x2 /* peek at incoming message */ 13912787Ssam #define MSG_DONTROUTE 0x4 /* send without using routing tables */ 14012787Ssam 14112787Ssam #define MSG_MAXIOVLEN 16 142