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*23751Skarels * @(#)socket.h 6.7 (Berkeley) 06/25/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 */ 4317552Skarels 4417552Skarels /* 4517160Ssam * Structure used for manipulating linger option. 4617052Skarels */ 4717160Ssam struct linger { 4817160Ssam int l_onoff; /* option on/off */ 4917160Ssam int l_linger; /* linger time */ 5017160Ssam }; 5117052Skarels 5217052Skarels /* 5317160Ssam * Level number for (get/set)sockopt() to apply to socket itself. 5417160Ssam */ 5517160Ssam #define SOL_SOCKET 0xffff /* options for socket level */ 5617160Ssam 5717160Ssam /* 5812787Ssam * Address families. 594930Swnj */ 6012787Ssam #define AF_UNSPEC 0 /* unspecified */ 6112787Ssam #define AF_UNIX 1 /* local to host (pipes, portals) */ 6212787Ssam #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 6312787Ssam #define AF_IMPLINK 3 /* arpanet imp addresses */ 6412787Ssam #define AF_PUP 4 /* pup protocols: e.g. BSP */ 6512787Ssam #define AF_CHAOS 5 /* mit CHAOS protocols */ 6612787Ssam #define AF_NS 6 /* XEROX NS protocols */ 6712787Ssam #define AF_NBS 7 /* nbs protocols */ 6812787Ssam #define AF_ECMA 8 /* european computer manufacturers */ 6912787Ssam #define AF_DATAKIT 9 /* datakit protocols */ 7012787Ssam #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 7112787Ssam #define AF_SNA 11 /* IBM SNA */ 72*23751Skarels #define AF_DECnet 12 /* DECnet */ 73*23751Skarels #define AF_DLI 13 /* Direct data link interface */ 74*23751Skarels #define AF_LAT 14 /* LAT */ 75*23751Skarels #define AF_HYLINK 15 /* NSC Hyperchannel */ 764930Swnj 77*23751Skarels #define AF_MAX 16 784930Swnj 794930Swnj /* 8012787Ssam * Structure used by kernel to store most 8112787Ssam * addresses. 824930Swnj */ 834930Swnj struct sockaddr { 8412508Ssam u_short sa_family; /* address family */ 854930Swnj char sa_data[14]; /* up to 14 bytes of direct address */ 864930Swnj }; 874930Swnj 884930Swnj /* 8912787Ssam * Structure used by kernel to pass protocol 9012787Ssam * information in raw sockets. 914930Swnj */ 9212787Ssam struct sockproto { 9312787Ssam u_short sp_family; /* address family */ 9412787Ssam u_short sp_protocol; /* protocol */ 9512787Ssam }; 966620Ssam 9712787Ssam /* 9812787Ssam * Protocol families, same as address families for now. 9912787Ssam */ 10012787Ssam #define PF_UNSPEC AF_UNSPEC 10112787Ssam #define PF_UNIX AF_UNIX 10212787Ssam #define PF_INET AF_INET 10312787Ssam #define PF_IMPLINK AF_IMPLINK 10412787Ssam #define PF_PUP AF_PUP 10512787Ssam #define PF_CHAOS AF_CHAOS 10612787Ssam #define PF_NS AF_NS 10712787Ssam #define PF_NBS AF_NBS 10812787Ssam #define PF_ECMA AF_ECMA 10912787Ssam #define PF_DATAKIT AF_DATAKIT 11012787Ssam #define PF_CCITT AF_CCITT 11112787Ssam #define PF_SNA AF_SNA 112*23751Skarels #define PF_DECnet AF_DECnet 113*23751Skarels #define PF_DLI AF_DLI 114*23751Skarels #define PF_LAT AF_LAT 115*23751Skarels #define PF_HYLINK AF_HYLINK 1168274Sroot 117*23751Skarels #define PF_MAX AF_MAX 11812787Ssam 11912787Ssam /* 12012787Ssam * Maximum queue length specifiable by listen. 12112787Ssam */ 12212787Ssam #define SOMAXCONN 5 12312787Ssam 12412787Ssam /* 12512787Ssam * Message header for recvmsg and sendmsg calls. 12612787Ssam */ 12712787Ssam struct msghdr { 12812787Ssam caddr_t msg_name; /* optional address */ 12912787Ssam int msg_namelen; /* size of address */ 13012787Ssam struct iovec *msg_iov; /* scatter/gather array */ 13112787Ssam int msg_iovlen; /* # elements in msg_iov */ 13212787Ssam caddr_t msg_accrights; /* access rights sent/received */ 13312787Ssam int msg_accrightslen; 13412787Ssam }; 13512787Ssam 13612787Ssam #define MSG_OOB 0x1 /* process out-of-band data */ 13712787Ssam #define MSG_PEEK 0x2 /* peek at incoming message */ 13812787Ssam #define MSG_DONTROUTE 0x4 /* send without using routing tables */ 13912787Ssam 14012787Ssam #define MSG_MAXIOVLEN 16 141