diff --git a/.gitattributes b/.gitattributes index c905690849..246339553a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6510,6 +6510,8 @@ packages/rtl-extra/fpmake.pp svneol=native#text/plain packages/rtl-extra/src/aix/osdefs.inc svneol=native#text/plain packages/rtl-extra/src/aix/unxsockh.inc svneol=native#text/plain packages/rtl-extra/src/android/osdefs.inc svneol=native#text/plain +packages/rtl-extra/src/android/unixsock.inc svneol=native#text/plain +packages/rtl-extra/src/android/unxsockh.inc svneol=native#text/plain packages/rtl-extra/src/beos/osdefs.inc svneol=native#text/plain packages/rtl-extra/src/beos/unixsock.inc svneol=native#text/plain packages/rtl-extra/src/beos/unxsockh.inc svneol=native#text/plain diff --git a/packages/rtl-extra/src/android/unixsock.inc b/packages/rtl-extra/src/android/unixsock.inc new file mode 100644 index 0000000000..32fb02b303 --- /dev/null +++ b/packages/rtl-extra/src/android/unixsock.inc @@ -0,0 +1,239 @@ +{ + This file is part of the Free Pascal run time library. + (c) 2004 by Marco van de Voort + member of the Free Pascal development team. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + socket call implementations for Linux + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY;without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +} + +{$if not defined(cpux86_64) and not defined(NO_SYSCALL_SOCKETCALL)} + {$define NEED_SOCKETCALL} +{$endif} + +{****************************************************************************** + Basic Socket Functions +******************************************************************************} + +{$ifdef NEED_SOCKETCALL} + +Const + { + Arguments to the Linux Kernel system call for sockets. All + Socket Connected calls go through the same system call, + with an extra argument to determine what action to take. + } + Socket_Sys_SOCKET = 1; + Socket_Sys_BIND = 2; + Socket_Sys_CONNECT = 3; + Socket_Sys_LISTEN = 4; + Socket_Sys_ACCEPT = 5; + Socket_Sys_GETSOCKNAME = 6; + Socket_Sys_GETPEERNAME = 7; + Socket_Sys_SOCKETPAIR = 8; + Socket_Sys_SEND = 9; + Socket_Sys_RECV = 10; + Socket_Sys_SENDTO = 11; + Socket_Sys_RECVFROM = 12; + Socket_Sys_SHUTDOWN = 13; + Socket_Sys_SETSOCKOPT = 14; + Socket_Sys_GETSOCKOPT = 15; + Socket_Sys_SENDMSG = 16; + Socket_Sys_RECVMSG = 17; + + +Function SocketCall(SockCallNr,a1,a2,a3,a4,a5,a6:TSysParam):cint; inline; +var + Args:array[1..6] of TSysParam; +begin + args[1]:=a1; + args[2]:=a2; + args[3]:=a3; + args[4]:=a4; + args[5]:=a5; + args[6]:=a6; + SocketCall:=do_Syscall(syscall_nr_socketcall,sockcallnr,TSysParam(@args)); + internal_socketerror:=fpgeterrno; +end; + + +function SocketCall(SockCallNr,a1,a2,a3:TSysParam):cint;inline; +begin + SocketCall:=SocketCall(SockCallNr,a1,a2,a3,0,0,0); +end; + +function fpsocket (domain:cint; xtype:cint; protocol: cint):cint; +begin + fpSocket:=SocketCall(Socket_Sys_socket,Domain,xtype,Protocol); +end; + +function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t; +begin + fpSend:=SocketCall(Socket_Sys_sendto,S,TSysParam(msg),Len,Flags,0,0); +end; + +function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t; +begin + fpSendto:=SocketCall(Socket_Sys_sendto,S,TSysParam(msg),Len,Flags,TSysParam(tox),tolen); +end; + +function fprecv (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t; +begin + fpRecv:=SocketCall(Socket_Sys_Recvfrom,S,tsysparam(buf),len,flags,0,0); +end; + +function fprecvfrom (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t; +begin + fpRecvFrom:=SocketCall(Socket_Sys_Recvfrom,S,TSysParam(buf),len,flags,TSysParam(from),TSysParam(fromlen)); +end; + +function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint; +begin + fpBind:=SocketCall(Socket_Sys_Bind,S,TSysParam(addrx),addrlen); +end; + +function fplisten (s:cint; backlog : cint):cint; +begin + fpListen:=SocketCall(Socket_Sys_Listen,S,backlog,0); +end; + +function fpaccept (s:cint; addrx : psockaddr; addrlen : psocklen):cint; +begin + fpAccept:=SocketCall(Socket_Sys_accept,S,TSysParam(addrx),TSysParam(addrlen)); +end; + +function fpconnect (s:cint; name : psockaddr; namelen : tsocklen):cint; +begin + fpConnect:=SocketCall(Socket_Sys_connect,S,TSysParam(name),namelen); +end; + +function fpshutdown (s:cint; how:cint):cint; +begin + fpShutDown:=SocketCall(Socket_Sys_shutdown,S,how,0); +end; + +function fpgetsockname (s:cint; name : psockaddr; namelen : psocklen):cint; +begin + fpGetSockName:=SocketCall(Socket_Sys_GetSockName,S,TSysParam(name),TSysParam(namelen)); +end; + +function fpgetpeername (s:cint; name : psockaddr; namelen : psocklen):cint; +begin + fpGetPeerName:=SocketCall(Socket_Sys_GetPeerName,S,TSysParam(name),TSysParam(namelen)); +end; + +function fpsetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : tsocklen):cint; +begin + fpSetSockOpt:=SocketCall(Socket_Sys_SetSockOpt,S,level,optname,TSysParam(optval),optlen,0); +end; + +function fpgetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint; +begin + fpGetSockOpt:=SocketCall(Socket_Sys_GetSockOpt,S,level,TSysParam(optname),TSysParam(optval),TSysParam(optlen),0); +end; + +function fpsocketpair (d:cint; xtype:cint; protocol:cint; sv:pcint):cint; +begin + fpSocketPair:=SocketCall(Socket_Sys_SocketPair,d,xtype,protocol,TSysParam(sv),0,0); +end; + +{$else NEED_SOCKETCALL} + +function fpsocket (domain:cint; xtype:cint; protocol: cint):cint; +begin + fpSocket:=do_syscall(syscall_nr_socket,Domain,xtype,Protocol); + internal_socketerror:=fpgeterrno; +end; + +function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t; +begin + fpSend:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,0,0); + internal_socketerror:=fpgeterrno; +end; + +function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t; +begin + fpSendto:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,TSysParam(tox),tolen); + internal_socketerror:=fpgeterrno; +end; + +function fprecv (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t; +begin + fpRecv:=do_syscall(syscall_nr_Recvfrom,S,tsysparam(buf),len,flags,0,0); + internal_socketerror:=fpgeterrno; +end; + +function fprecvfrom (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t; +begin + fpRecvFrom:=do_syscall(syscall_nr_Recvfrom,S,TSysParam(buf),len,flags,TSysParam(from),TSysParam(fromlen)); + internal_socketerror:=fpgeterrno; +end; + +function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint; +begin + fpBind:=do_syscall(syscall_nr_Bind,S,TSysParam(addrx),addrlen); + internal_socketerror:=fpgeterrno; +end; + +function fplisten (s:cint; backlog : cint):cint; +begin + fpListen:=do_syscall(syscall_nr_Listen,S,backlog); + internal_socketerror:=fpgeterrno; +end; + +function fpaccept (s:cint; addrx : psockaddr; addrlen : psocklen):cint; +begin + fpAccept:=do_syscall(syscall_nr_accept,S,TSysParam(addrx),TSysParam(addrlen)); + internal_socketerror:=fpgeterrno; +end; + +function fpconnect (s:cint; name : psockaddr; namelen : tsocklen):cint; +begin + fpConnect:=do_syscall(syscall_nr_connect,S,TSysParam(name),namelen); + internal_socketerror:=fpgeterrno; +end; + +function fpshutdown (s:cint; how:cint):cint; +begin + fpShutDown:=do_syscall(syscall_nr_shutdown,S,how); + internal_socketerror:=fpgeterrno; +end; + +function fpgetsockname (s:cint; name : psockaddr; namelen : psocklen):cint; +begin + fpGetSockName:=do_syscall(syscall_nr_GetSockName,S,TSysParam(name),TSysParam(namelen)); + internal_socketerror:=fpgeterrno; +end; + +function fpgetpeername (s:cint; name : psockaddr; namelen : psocklen):cint; +begin + fpGetPeerName:=do_syscall(syscall_nr_GetPeerName,S,TSysParam(name),TSysParam(namelen)); + internal_socketerror:=fpgeterrno; +end; + +function fpsetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : tsocklen):cint; +begin + fpSetSockOpt:=do_syscall(syscall_nr_SetSockOpt,S,level,optname,TSysParam(optval),optlen); + internal_socketerror:=fpgeterrno; +end; + +function fpgetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint; +begin + fpGetSockOpt:=do_syscall(syscall_nr_GetSockOpt,S,level,TSysParam(optname),TSysParam(optval),TSysParam(optlen)); + internal_socketerror:=fpgeterrno; +end; + +function fpsocketpair (d:cint; xtype:cint; protocol:cint; sv:pcint):cint; +begin + fpSocketPair:=do_syscall(syscall_nr_SocketPair,d,xtype,protocol,TSysParam(sv)); + internal_socketerror:=fpgeterrno; +end; + +{$endif NEED_do_syscall} + diff --git a/packages/rtl-extra/src/android/unxsockh.inc b/packages/rtl-extra/src/android/unxsockh.inc new file mode 100644 index 0000000000..ccbad9a18d --- /dev/null +++ b/packages/rtl-extra/src/android/unxsockh.inc @@ -0,0 +1,345 @@ +{ + This file is part of the Free Pascal run time library. + (c) 2000-2003 by Marco van de Voort + member of the Free Pascal development team. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + socket call implementations for FreeBSD + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY;without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +} + +Const +{* Supported address families. *} + AF_UNSPEC = 0; + AF_UNIX = 1; { Unix domain sockets } + AF_LOCAL = 1; { POSIX name for AF_UNIX } + AF_INET = 2; { Internet IP Protocol } + AF_AX25 = 3; { Amateur Radio AX.25 } + AF_IPX = 4; { Novell IPX } + AF_APPLETALK = 5; { AppleTalk DDP } + AF_NETROM = 6; { Amateur Radio NET/ROM } + AF_BRIDGE = 7; { Multiprotocol bridge } + AF_ATMPVC = 8; { ATM PVCs } + AF_X25 = 9; { Reserved for X.25 project } + AF_INET6 = 10; { IP version 6 } + AF_ROSE = 11; { Amateur Radio X.25 PLP } + AF_DECnet = 12; { Reserved for DECnet project } + AF_NETBEUI = 13; { Reserved for 802.2LLC project} + AF_SECURITY = 14; { Security callback pseudo AF } + AF_KEY = 15; { PF_KEY key management API } + AF_NETLINK = 16; + AF_ROUTE = AF_NETLINK; { Alias to emulate 4.4BSD } + AF_PACKET = 17; { Packet family } + AF_ASH = 18; { Ash } + AF_ECONET = 19; { Acorn Econet } + AF_ATMSVC = 20; { ATM SVCs } + AF_SNA = 22; { Linux SNA Project (nutters!) } + AF_IRDA = 23; { IRDA sockets } + AF_PPPOX = 24; { PPPoX sockets } + AF_WANPIPE = 25; { Wanpipe API Sockets } + AF_LLC = 26; { Linux LLC } + AF_TIPC = 30; { TIPC sockets } + AF_BLUETOOTH = 31; { Bluetooth sockets } + AF_MAX = 32; { For now.. } + + SOCK_MAXADDRLEN = 255; { longest possible addresses } + +{ +* Protocol families, same as address families for now. +} + + PF_UNSPEC = AF_UNSPEC; + PF_UNIX = AF_UNIX; + PF_LOCAL = AF_LOCAL; + PF_INET = AF_INET; + PF_AX25 = AF_AX25; + PF_IPX = AF_IPX; + PF_APPLETALK = AF_APPLETALK; + PF_NETROM = AF_NETROM; + PF_BRIDGE = AF_BRIDGE; + PF_ATMPVC = AF_ATMPVC; + PF_X25 = AF_X25; + PF_INET6 = AF_INET6; + PF_ROSE = AF_ROSE; + PF_DECnet = AF_DECnet; + PF_NETBEUI = AF_NETBEUI; + PF_SECURITY = AF_SECURITY; + PF_KEY = AF_KEY; + PF_NETLINK = AF_NETLINK; + PF_ROUTE = AF_ROUTE; + PF_PACKET = AF_PACKET; + PF_ASH = AF_ASH; + PF_ECONET = AF_ECONET; + PF_ATMSVC = AF_ATMSVC; + PF_SNA = AF_SNA; + PF_IRDA = AF_IRDA; + PF_PPPOX = AF_PPPOX; + PF_WANPIPE = AF_WANPIPE; + PF_LLC = AF_LLC; + PF_TIPC = AF_TIPC; + PF_BLUETOOTH = AF_BLUETOOTH; + PF_MAX = AF_MAX; + + +{ Maximum queue length specifiable by listen. } + SOMAXCONN = 128; + +{ For setsockoptions(2) } + SOL_SOCKET = 1; + SO_DEBUG = 1; + SO_REUSEADDR= 2; + SO_TYPE = 3; + SO_ERROR = 4; + SO_DONTROUTE= 5; + SO_BROADCAST= 6; + SO_SNDBUF = 7; + SO_RCVBUF = 8; + SO_KEEPALIVE= 9; + SO_OOBINLINE= 10; + SO_NO_CHECK = 11; + SO_PRIORITY = 12; + SO_LINGER = 13; + SO_BSDCOMPAT= 14; +{ To add : SO_REUSEPORT 15 } + SO_PASSCRED= 16; + SO_PEERCRED= 17; + SO_RCVLOWAT= 18; + SO_SNDLOWAT= 19; + SO_RCVTIMEO= 20; + SO_SNDTIMEO= 21; + +{ Security levels - as per NRL IPv6 - don't actually do anything } + + SO_SECURITY_AUTHENTICATION = 22; + SO_SECURITY_ENCRYPTION_TRANSPORT= 23; + SO_SECURITY_ENCRYPTION_NETWORK = 24; + + SO_BINDTODEVICE= 25; + +{ Socket filtering } + + SO_ATTACH_FILTER= 26; + SO_DETACH_FILTER= 27; + SO_PEERNAME = 28; + SO_TIMESTAMP = 29; + SCM_TIMESTAMP = SO_TIMESTAMP; + SO_ACCEPTCONN = 30; + +// Following from kernel 2.6.14-1.1637_FC4 + + SHUT_RD = 0; { shut down the reading side } + SHUT_WR = 1; { shut down the writing side } + SHUT_RDWR = 2; { shut down both sides } + +//from /usr/include/netinet/in.h + + IPPROTO_IP = 0; { Dummy protocol for TCP. } + IPPROTO_HOPOPTS = 0; { IPv6 Hop-by-Hop options. } + + IPPROTO_ICMP = 1; { Internet Control Message Protocol. } + IPPROTO_IGMP = 2; { Internet Group Management Protocol. } + IPPROTO_IPIP = 4; { IPIP tunnels (older KA9Q tunnels use 94). } + IPPROTO_TCP = 6; { Transmission Control Protocol. } + IPPROTO_EGP = 8; { Exterior Gateway Protocol. } + + IPPROTO_PUP = 12; { PUP protocol. } + IPPROTO_UDP = 17; { User Datagram Protocol. } + IPPROTO_IDP = 22; { XNS IDP protocol. } + IPPROTO_TP = 29; { SO Transport Protocol Class 4. } + IPPROTO_IPV6 = 41; { IPv6 header. } + + IPPROTO_ROUTING = 43; { IPv6 routing header. } + IPPROTO_FRAGMENT = 44; { IPv6 fragmentation header. } + IPPROTO_RSVP = 46; { Reservation Protocol. } + IPPROTO_GRE = 47; { General Routing Encapsulation. } + IPPROTO_ESP = 50; { encapsulating security payload. } + IPPROTO_AH = 51; { authentication header. } + IPPROTO_ICMPV6 = 58; { ICMPv6. } + IPPROTO_NONE = 59; { IPv6 no next header. } + IPPROTO_DSTOPTS = 60; { IPv6 destination options. } + IPPROTO_MTP = 92; { Multicast Transport Protocol. } + IPPROTO_ENCAP = 98; { Encapsulation Header. } + IPPROTO_PIM = 103; { Protocol Independent Multicast. } + IPPROTO_COMP = 108; { Compression Header Protocol. } + IPPROTO_SCTP = 132; { Stream Control Transmission Protocol. } + IPPROTO_RAW = 255; { Raw IP packets. } + IPPROTO_MAX = 255; +//from /usr/include/bits/in.h +{ Options for use with getsockopt' and setsockopt' at the IP level. + The first word in the comment at the right is the data type used; + "bool" means a boolean value stored in an int'. } + + IP_OPTIONS = 4; { ip_opts; IP per-packet options. } + IP_HDRINCL = 3; { int; Header is included with data. } + IP_TOS = 1; { int; IP type of service and precedence. } + IP_TTL = 2; { int; IP time to live. } + IP_RECVOPTS = 6; { bool; Receive all IP options w/datagram. } +{ For BSD compatibility. } + IP_RETOPTS = 7; { ip_opts; Set/get IP per-packet options. } + IP_RECVRETOPTS = IP_RETOPTS; { bool; Receive IP options for response. } + + IP_MULTICAST_IF = 32; { in_addr; set/get IP multicast i/f } + IP_MULTICAST_TTL = 33; { u_char; set/get IP multicast ttl } + IP_MULTICAST_LOOP = 34; { i_char; set/get IP multicast loopback } + IP_ADD_MEMBERSHIP = 35; { ip_mreq; add an IP group membership } + IP_DROP_MEMBERSHIP = 36; { ip_mreq; drop an IP group membership } + IP_UNBLOCK_SOURCE = 37; { ip_mreq_source: unblock data from source } + IP_BLOCK_SOURCE = 38; { ip_mreq_source: block data from source } + IP_ADD_SOURCE_MEMBERSHIP = 39; { ip_mreq_source: join source group } + IP_DROP_SOURCE_MEMBERSHIP = 40; { ip_mreq_source: leave source group } + IP_MSFILTER = 41; + MCAST_JOIN_GROUP = 42; { group_req: join any-source group } + MCAST_BLOCK_SOURCE = 43; { group_source_req: block from given group } + MCAST_UNBLOCK_SOURCE = 44; { group_source_req: unblock from given group} + MCAST_LEAVE_GROUP = 45; { group_req: leave any-source group } + MCAST_JOIN_SOURCE_GROUP = 46; { group_source_req: join source-spec gr } + MCAST_LEAVE_SOURCE_GROUP = 47; { group_source_req: leave source-spec gr} + MCAST_MSFILTER = 48; + + MCAST_EXCLUDE = 0; + MCAST_INCLUDE = 1; + + IP_ROUTER_ALERT = 5; { bool } + IP_PKTINFO = 8; { bool } + IP_PKTOPTIONS = 9; + IP_PMTUDISC = 10; { obsolete name? } + IP_MTU_DISCOVER = 10; { int; see below } + IP_RECVERR = 11; { bool } + IP_RECVTTL = 12; { bool } + IP_RECVTOS = 13; { bool } + + +{ IP_MTU_DISCOVER arguments. } + IP_PMTUDISC_DONT = 0; { Never send DF frames. } + IP_PMTUDISC_WANT = 1; { Use per route hints. } + IP_PMTUDISC_DO = 2; { Always DF. } + +{ To select the IP level. } + SOL_IP = 0; + + IP_DEFAULT_MULTICAST_TTL = 1; + IP_DEFAULT_MULTICAST_LOOP = 1; + IP_MAX_MEMBERSHIPS = 20; + + +{ Options for use with getsockopt' and setsockopt' at the IPv6 level. + The first word in the comment at the right is the data type used; + "bool" means a boolean value stored in an int'. } + IPV6_ADDRFORM = 1; + IPV6_PKTINFO = 2; + IPV6_HOPOPTS = 3; + IPV6_DSTOPTS = 4; + IPV6_RTHDR = 5; + IPV6_RXSRCRT = IPV6_RTHDR; + //this may be an old name, I couldn't find it in my include files but + //I found it with google. It may have been depreciated because I only + //saw it in earlier files. + IPV6_PKTOPTIONS = 6; + IPV6_CHECKSUM = 7; + IPV6_HOPLIMIT = 8; + + SCM_SRCRT = IPV6_RXSRCRT; + + IPV6_NEXTHOP = 9; + IPV6_AUTHHDR = 10; + IPV6_UNICAST_HOPS = 16; + IPV6_MULTICAST_IF = 17; + IPV6_MULTICAST_HOPS = 18; + IPV6_MULTICAST_LOOP = 19; + IPV6_JOIN_GROUP = 20; + IPV6_LEAVE_GROUP = 21; + IPV6_ROUTER_ALERT = 22; + IPV6_MTU_DISCOVER = 23; + IPV6_MTU = 24; + IPV6_RECVERR = 25; + IPV6_V6ONLY = 26; + IPV6_JOIN_ANYCAST = 27; + IPV6_LEAVE_ANYCAST = 28; + IPV6_IPSEC_POLICY = 34; + IPV6_XFRM_POLICY = 35; + +{ Obsolete synonyms for the above. } + IPV6_ADD_MEMBERSHIP = IPV6_JOIN_GROUP; + IPV6_DROP_MEMBERSHIP = IPV6_LEAVE_GROUP; + IPV6_RXHOPOPTS = IPV6_HOPOPTS; + IPV6_RXDSTOPTS = IPV6_DSTOPTS; + +{ IPV6_MTU_DISCOVER values. } + IPV6_PMTUDISC_DONT = 0; { Never send DF frames. } + IPV6_PMTUDISC_WANT = 1; { Use per route hints. } + IPV6_PMTUDISC_DO = 2; { Always DF. } + +{ Socket level values for IPv6. } + SOL_IPV6 = 41; + SOL_ICMPV6 = 58; + +{ Routing header options for IPv6. } + IPV6_RTHDR_LOOSE = 0; { Hop doesn't need to be neighbour. } + IPV6_RTHDR_STRICT = 1; { Hop must be a neighbour. } + + IPV6_RTHDR_TYPE_0 = 0; { IPv6 Routing header type 0. } + + { Flags for send, recv etc. } + MSG_OOB = $0001; { Process out-of-band data} + MSG_PEEK = $0002; { Peek at incoming messages } + MSG_DONTROUTE= $0004; { Don't use local routing } + MSG_TRYHARD = MSG_DONTROUTE; + MSG_CTRUNC = $0008; { Control data lost before delivery } + MSG_PROXY = $0010; { Supply or ask second address } + MSG_TRUNC = $0020; + MSG_DONTWAIT = $0040; { Non-blocking I/O } + MSG_EOR = $0080; { End of record } + MSG_WAITALL = $0100; { Wait for a full request } + MSG_FIN = $0200; + MSG_SYN = $0400; + MSG_CONFIRM = $0800; { Confirm path validity } + MSG_RST = $1000; + MSG_ERRQUERE = $2000; { Fetch message from error queue } + MSG_NOSIGNAL = $4000; { Do not generate SIGPIPE } + MSG_MORE = $8000; { Sender will send more } + MSG_EOF = MSG_FIN; + + TCP_NODELAY = 1; + { Limit MSS } + TCP_MAXSEG = 2; + { Never send partially complete segments } + TCP_CORK = 3; + { Start keeplives after this period } + TCP_KEEPIDLE = 4; + { Interval between keepalives } + TCP_KEEPINTVL = 5; + { Number of keepalives before death } + TCP_KEEPCNT = 6; + { Number of SYN retransmits } + TCP_SYNCNT = 7; + { Life time of orphaned FIN-WAIT-2 state } + TCP_LINGER2 = 8; + { Wake up listener only when data arrive } + TCP_DEFER_ACCEPT = 9; + { Bound advertised window } + TCP_WINDOW_CLAMP = 10; + { Information about this connection. } + TCP_INFO = 11; + { Block/reenable quick acks } + TCP_QUICKACK = 12; + { Congestion control algorithm } + TCP_CONGESTION = 13; + { TCP MD5 Signature (RFC2385) } + TCP_MD5SIG = 14; + + UDP_CORK = 1; + { Set the socket to accept encapsulated packets } + UDP_ENCAP = 100; + { UDP encapsulation types } + { draft-ietf-ipsec-nat-t-ike-00/01 } + UDP_ENCAP_ESPINUDP_NON_IKE = 1; + { draft-ietf-ipsec-udp-encaps-06 } + UDP_ENCAP_ESPINUDP = 2; + { rfc2661 } + UDP_ENCAP_L2TPINUDP = 3; +