Back to index

glibc  2.9
socket.h
Go to the documentation of this file.
00001 /* System-specific socket constants and types.  Generic/4.3 BSD version.
00002    Copyright (C) 1991,92,1994-1999,2000,2001 Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #ifndef __BITS_SOCKET_H
00021 #define __BITS_SOCKET_H     1
00022 
00023 #if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H
00024 # error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
00025 #endif
00026 
00027 #include <limits.h>
00028 #include <bits/types.h>
00029 
00030 #define       __need_size_t
00031 #include <stddef.h>
00032 
00033 /* Type for length arguments in socket calls.  */
00034 #ifndef __socklen_t_defined
00035 typedef __socklen_t socklen_t;
00036 # define __socklen_t_defined
00037 #endif
00038 
00039 
00040 /* Types of sockets.  */
00041 enum __socket_type
00042 {
00043   SOCK_STREAM = 1,          /* Sequenced, reliable, connection-based
00044                                byte streams.  */
00045 #define SOCK_STREAM SOCK_STREAM
00046   SOCK_DGRAM = 2,           /* Connectionless, unreliable datagrams
00047                                of fixed maximum length.  */
00048 #define SOCK_DGRAM SOCK_DGRAM
00049   SOCK_RAW = 3,                    /* Raw protocol interface.  */
00050 #define SOCK_RAW SOCK_RAW
00051   SOCK_RDM = 4,                    /* Reliably-delivered messages.  */
00052 #define SOCK_RDM SOCK_RDM
00053   SOCK_SEQPACKET = 5        /* Sequenced, reliable, connection-based,
00054                                datagrams of fixed maximum length.  */
00055 #define SOCK_SEQPACKET SOCK_SEQPACKET
00056 };
00057 
00058 /* Protocol families.  */
00059 #define       PF_UNSPEC     0      /* Unspecified.  */
00060 #define       PF_LOCAL      1      /* Local to host (pipes and file-domain).  */
00061 #define       PF_UNIX              PF_LOCAL /* Old BSD name for PF_LOCAL.  */
00062 #define       PF_FILE              PF_LOCAL /* POSIX name for PF_LOCAL.  */
00063 #define       PF_INET              2      /* IP protocol family.  */
00064 #define       PF_IMPLINK    3      /* ARPAnet IMP protocol.  */
00065 #define       PF_PUP        4      /* PUP protocols.  */
00066 #define       PF_CHAOS      5      /* MIT Chaos protocols.  */
00067 #define       PF_NS         6      /* Xerox NS protocols.  */
00068 #define       PF_ISO        7      /* ISO protocols.  */
00069 #define       PF_OSI        PF_ISO
00070 #define       PF_ECMA              8      /* ECMA protocols.  */
00071 #define       PF_DATAKIT    9      /* AT&T Datakit protocols.  */
00072 #define       PF_CCITT      10     /* CCITT protocols (X.25 et al).  */
00073 #define       PF_SNA        11     /* IBM SNA protocol.  */
00074 #define       PF_DECnet     12     /* DECnet protocols.  */
00075 #define       PF_DLI        13     /* Direct data link interface.  */
00076 #define       PF_LAT        14     /* DEC Local Area Transport protocol.  */
00077 #define       PF_HYLINK     15     /* NSC Hyperchannel protocol.  */
00078 #define       PF_APPLETALK  16     /* Don't use this.  */
00079 #define       PF_ROUTE      17     /* Internal Routing Protocol.  */
00080 #define       PF_LINK              18     /* Link layer interface.  */
00081 #define       PF_XTP        19     /* eXpress Transfer Protocol (no AF).  */
00082 #define       PF_COIP              20     /* Connection-oriented IP, aka ST II.  */
00083 #define       PF_CNT        21     /* Computer Network Technology.  */
00084 #define PF_RTIP             22     /* Help Identify RTIP packets.  **/
00085 #define       PF_IPX        23     /* Novell Internet Protocol.  */
00086 #define       PF_SIP        24     /* Simple Internet Protocol.  */
00087 #define PF_PIP              25     /* Help Identify PIP packets.  */
00088 #define PF_INET6     26     /* IP version 6.  */
00089 #define       PF_MAX        27
00090 
00091 /* Address families.  */
00092 #define       AF_UNSPEC     PF_UNSPEC
00093 #define       AF_LOCAL      PF_LOCAL
00094 #define       AF_UNIX              PF_UNIX
00095 #define       AF_FILE              PF_FILE
00096 #define       AF_INET              PF_INET
00097 #define       AF_IMPLINK    PF_IMPLINK
00098 #define       AF_PUP        PF_PUP
00099 #define       AF_CHAOS      PF_CHAOS
00100 #define       AF_NS         PF_NS
00101 #define       AF_ISO        PF_ISO
00102 #define       AF_OSI        PF_OSI
00103 #define       AF_ECMA              PF_ECMA
00104 #define       AF_DATAKIT    PF_DATAKIT
00105 #define       AF_CCITT      PF_CCITT
00106 #define       AF_SNA        PF_SNA
00107 #define       AF_DECnet     PF_DECnet
00108 #define       AF_DLI        PF_DLI
00109 #define       AF_LAT        PF_LAT
00110 #define       AF_HYLINK     PF_HYLINK
00111 #define       AF_APPLETALK  PF_APPLETALK
00112 #define       AF_ROUTE      PF_ROUTE
00113 #define       AF_LINK              PF_LINK
00114 #define       pseudo_AF_XTP PF_XTP
00115 #define       AF_COIP              PF_COIP
00116 #define       AF_CNT        PF_CNT
00117 #define pseudo_AF_RTIP      PF_RTIP
00118 #define       AF_IPX        PF_IPX
00119 #define       AF_SIP        PF_SIP
00120 #define pseudo_AF_PIP       PF_PIP
00121 #define AF_INET6     PF_INET6
00122 #define       AF_MAX        PF_MAX
00123 
00124 
00125 /* Get the definition of the macro to define the common sockaddr members.  */
00126 #include <bits/sockaddr.h>
00127 
00128 /* Structure describing a generic socket address.  */
00129 struct sockaddr
00130   {
00131     __SOCKADDR_COMMON (sa_);       /* Common data: address family and length.  */
00132     char sa_data[14];              /* Address data.  */
00133   };
00134 
00135 
00136 /* Structure large enough to hold any socket address (with the historical
00137    exception of AF_UNIX).  We reserve 128 bytes.  */
00138 #if ULONG_MAX > 0xffffffff
00139 # define __ss_aligntype     __uint64_t
00140 #else
00141 # define __ss_aligntype     __uint32_t
00142 #endif
00143 #define _SS_SIZE     128
00144 #define _SS_PADSIZE  (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
00145 
00146 struct sockaddr_storage
00147   {
00148     __SOCKADDR_COMMON (ss_);       /* Address family, etc.  */
00149     __ss_aligntype __ss_align;     /* Force desired alignment.  */
00150     char __ss_padding[_SS_PADSIZE];
00151   };
00152 
00153 
00154 /* Bits in the FLAGS argument to `send', `recv', et al.  */
00155 enum
00156   {
00157     MSG_OOB          = 0x01,       /* Process out-of-band data.  */
00158 #define MSG_OOB MSG_OOB
00159     MSG_PEEK         = 0x02,       /* Peek at incoming messages.  */
00160 #define MSG_PEEK MSG_PEEK
00161     MSG_DONTROUTE    = 0x04,       /* Don't use local routing.  */
00162 #define MSG_DONTROUTE MSG_DONTROUTE
00163     MSG_EOR          = 0x08,       /* Data completes record.  */
00164 #define MSG_EOR MSG_EOR
00165     MSG_TRUNC        = 0x10,       /* Data discarded before delivery.  */
00166 #define MSG_TRUNC MSG_TRUNC
00167     MSG_CTRUNC              = 0x20,       /* Control data lost before delivery.  */
00168 #define MSG_CTRUNC MSG_CTRUNC
00169     MSG_WAITALL             = 0x40,       /* Wait for full request or error.  */
00170 #define MSG_WAITALL MSG_WAITALL
00171     MSG_DONTWAIT     = 0x80 /* This message should be nonblocking.  */
00172 #define MSG_DONTWAIT MSG_DONTWAIT
00173   };
00174 
00175 
00176 /* Structure describing messages sent by
00177    `sendmsg' and received by `recvmsg'.  */
00178 struct msghdr
00179   {
00180     __ptr_t msg_name;              /* Address to send to/receive from.  */
00181     socklen_t msg_namelen;  /* Length of address data.  */
00182 
00183     struct iovec *msg_iov;  /* Vector of data to send/receive into.  */
00184     int msg_iovlen;         /* Number of elements in the vector.  */
00185 
00186     __ptr_t msg_accrights;  /* Access rights information.  */
00187     socklen_t msg_accrightslen;    /* Length of access rights information.  */
00188 
00189     int msg_flags;          /* Flags in received message.  */
00190   };
00191 
00192 
00193 /* Protocol number used to manipulate socket-level options
00194    with `getsockopt' and `setsockopt'.  */
00195 #define       SOL_SOCKET    0xffff
00196 
00197 /* Socket-level options for `getsockopt' and `setsockopt'.  */
00198 enum
00199   {
00200     SO_DEBUG = 0x0001,             /* Record debugging information.  */
00201 #define SO_DEBUG SO_DEBUG
00202     SO_ACCEPTCONN = 0x0002, /* Accept connections on socket.  */
00203 #define SO_ACCEPTCONN SO_ACCEPTCONN
00204     SO_REUSEADDR = 0x0004,  /* Allow reuse of local addresses.  */
00205 #define SO_REUSEADDR SO_REUSEADDR
00206     SO_KEEPALIVE = 0x0008,  /* Keep connections alive and send
00207                                SIGPIPE when they die.  */
00208 #define SO_KEEPALIVE SO_KEEPALIVE
00209     SO_DONTROUTE = 0x0010,  /* Don't do local routing.  */
00210 #define SO_DONTROUTE SO_DONTROUTE
00211     SO_BROADCAST = 0x0020,  /* Allow transmission of
00212                                broadcast messages.  */
00213 #define SO_BROADCAST SO_BROADCAST
00214     SO_USELOOPBACK = 0x0040,       /* Use the software loopback to avoid
00215                                hardware use when possible.  */
00216 #define SO_USELOOPBACK SO_USELOOPBACK
00217     SO_LINGER = 0x0080,            /* Block on close of a reliable
00218                                socket to transmit pending data.  */
00219 #define SO_LINGER SO_LINGER
00220     SO_OOBINLINE = 0x0100,  /* Receive out-of-band data in-band.  */
00221 #define SO_OOBINLINE SO_OOBINLINE
00222     SO_REUSEPORT = 0x0200,  /* Allow local address and port reuse.  */
00223 #define SO_REUSEPORT SO_REUSEPORT
00224     SO_SNDBUF = 0x1001,            /* Send buffer size.  */
00225 #define SO_SNDBUF SO_SNDBUF
00226     SO_RCVBUF = 0x1002,            /* Receive buffer.  */
00227 #define SO_RCVBUF SO_RCVBUF
00228     SO_SNDLOWAT = 0x1003,   /* Send low-water mark.  */
00229 #define SO_SNDLOWAT SO_SNDLOWAT
00230     SO_RCVLOWAT = 0x1004,   /* Receive low-water mark.  */
00231 #define SO_RCVLOWAT SO_RCVLOWAT
00232     SO_SNDTIMEO = 0x1005,   /* Send timeout.  */
00233 #define SO_SNDTIMEO SO_SNDTIMEO
00234     SO_RCVTIMEO = 0x1006,   /* Receive timeout.  */
00235 #define SO_RCVTIMEO SO_RCVTIMEO
00236     SO_ERROR = 0x1007,             /* Get and clear error status.  */
00237 #define SO_ERROR SO_ERROR
00238     SO_STYLE = 0x1008,             /* Get socket connection style.  */
00239 #define SO_STYLE SO_STYLE
00240     SO_TYPE = SO_STYLE             /* Compatible name for SO_STYLE.  */
00241 #define SO_TYPE SO_TYPE
00242   };
00243 
00244 /* Structure used to manipulate the SO_LINGER option.  */
00245 struct linger
00246   {
00247     int l_onoff;            /* Nonzero to linger on close.  */
00248     int l_linger;           /* Time to linger.  */
00249   };
00250 
00251 #endif /* bits/socket.h */