945 lines
37 KiB
Plaintext
945 lines
37 KiB
Plaintext
{
|
|
$Project$
|
|
$Workfile$
|
|
$Revision$
|
|
$DateUTC$
|
|
$Id$
|
|
|
|
This file is part of the Indy (Internet Direct) project, and is offered
|
|
under the dual-licensing agreement described on the Indy website.
|
|
(http://www.indyproject.org/)
|
|
|
|
Copyright:
|
|
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
|
|
}
|
|
{
|
|
$Log$
|
|
}
|
|
{
|
|
Rev 1.0 2004.02.07 12:25:16 PM czhower
|
|
Recheckin to fix case of filename
|
|
|
|
Rev 1.1 2/7/2004 5:20:06 AM JPMugaas
|
|
Added some constants that were pasted from other places. DotNET uses the
|
|
standard Winsock 2 error consstants. We don't want to link to IdWInsock or
|
|
Windows though because that causes other problems.
|
|
|
|
Rev 1.0 2004.02.03 3:14:44 PM czhower
|
|
Move and updates
|
|
|
|
Rev 1.12 2003.12.28 6:53:46 PM czhower
|
|
Added some consts.
|
|
|
|
Rev 1.11 10/28/2003 9:14:54 PM BGooijen
|
|
.net
|
|
|
|
Rev 1.10 10/19/2003 10:46:18 PM BGooijen
|
|
Added more consts
|
|
|
|
Rev 1.9 10/19/2003 9:15:28 PM BGooijen
|
|
added some SocketOptionName consts for dotnet
|
|
|
|
Rev 1.8 10/19/2003 5:21:30 PM BGooijen
|
|
SetSocketOption
|
|
|
|
Rev 1.7 10/2/2003 7:31:18 PM BGooijen
|
|
.net
|
|
|
|
Rev 1.6 2003.10.02 10:16:32 AM czhower
|
|
.Net
|
|
|
|
Rev 1.5 2003.10.01 5:05:18 PM czhower
|
|
.Net
|
|
|
|
Rev 1.4 2003.10.01 1:12:40 AM czhower
|
|
.Net
|
|
|
|
Rev 1.3 2003.09.30 12:09:38 PM czhower
|
|
DotNet changes.
|
|
|
|
Rev 1.2 9/29/2003 10:28:30 PM BGooijen
|
|
Added constants for DotNet
|
|
|
|
Rev 1.1 12-14-2002 14:58:34 BGooijen
|
|
Added definition for Id_SOCK_RDM and Id_SOCK_SEQPACKET
|
|
|
|
Rev 1.0 11/13/2002 08:59:14 AM JPMugaas
|
|
}
|
|
|
|
unit IdStackConsts;
|
|
|
|
interface
|
|
|
|
{$I IdCompilerDefines.inc}
|
|
|
|
{ This should be the only unit except OS Stack units that reference
|
|
Winsock or lnxsock }
|
|
|
|
uses
|
|
{$IFDEF DOTNET}
|
|
System.Net.Sockets;
|
|
{$ENDIF}
|
|
//TODO: I'm not really sure how other platforms are supported with asockets header
|
|
//Do I use the sockets unit or do something totally different for each platform
|
|
{$IFDEF WINDOWS}
|
|
IdWship6, //for some constants that supplement IdWinsock
|
|
IdWinsock2;
|
|
{$ENDIF}
|
|
{$IFDEF OS2}
|
|
pmwsock;
|
|
{$ENDIF}
|
|
{$IFDEF SOCKETTYPE_IS_CINT}
|
|
IdCTypes,
|
|
{$ENDIF}
|
|
{$IFDEF NETWARE_CLIB}
|
|
winsock; //not sure if this is correct
|
|
{$ENDIF}
|
|
{$IFDEF NETWARE_LIBC}
|
|
winsock; //not sure if this is correct
|
|
{$ENDIF}
|
|
{$IFDEF MACOS_CLASSIC}
|
|
{$ENDIF}
|
|
{$IFDEF UNIX}
|
|
{$IFDEF USE_VCL_POSIX}
|
|
{
|
|
IMPORTANT!!!
|
|
|
|
The new Posix units have platform specific stuff. Since this code and
|
|
the definitions are not intented to be compiled in non-Unix-like operating
|
|
systems, platform warnings are not going to be too helpful.
|
|
}
|
|
{$I IdSymbolPlatformOff.inc}
|
|
IdVCLPosixSupplemental,
|
|
Posix.Errno,Posix.NetDB, Posix.NetinetIn, Posix.SysSocket;
|
|
{$ENDIF}
|
|
{$IFDEF KYLIXCOMPAT}
|
|
libc;
|
|
{$ENDIF}
|
|
{$IFDEF USE_BASEUNIX}
|
|
Sockets, BaseUnix, Unix; // FPC "native" Unix units.
|
|
//Marco may want to change the socket interface unit
|
|
//so we don't use the libc header.
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
|
|
type
|
|
{$IFDEF USE_BASEUNIX}
|
|
TSocket = cint; // TSocket is afaik not POSIX, so we have to add it
|
|
// (Socket() returns a C int according to opengroup)
|
|
{$ENDIF}
|
|
|
|
TIdStackSocketHandle =
|
|
{$IFDEF DOTNET}
|
|
Socket
|
|
{$ELSE}
|
|
{$IFDEF USE_VCL_POSIX}
|
|
Integer
|
|
{$ELSE}
|
|
TSocket
|
|
{$ENDIF}
|
|
{$ENDIF};
|
|
|
|
var
|
|
Id_SO_True: Integer = 1;
|
|
Id_SO_False: Integer = 0;
|
|
|
|
const
|
|
{$IFDEF DOTNET}
|
|
Id_IPV6_UNICAST_HOPS = SocketOptionName.IpTimeToLive;
|
|
Id_IPV6_MULTICAST_IF = SocketOptionName.MulticastInterface;
|
|
Id_IPV6_MULTICAST_HOPS = SocketOptionName.MulticastTimeToLive;
|
|
Id_IPV6_MULTICAST_LOOP = SocketOptionName.MulticastLoopback;
|
|
Id_IPV6_ADD_MEMBERSHIP = SocketOptionName.AddMembership;
|
|
Id_IPV6_DROP_MEMBERSHIP = SocketOptionName.DropMembership;
|
|
Id_IPV6_PKTINFO = SocketOptionName.PacketInformation;
|
|
Id_IP_MULTICAST_TTL = SocketOptionName.MulticastTimeToLive;
|
|
Id_IP_MULTICAST_LOOP = SocketOptionName.MulticastLoopback;
|
|
Id_IP_ADD_MEMBERSHIP = SocketOptionName.AddMembership;
|
|
Id_IP_DROP_MEMBERSHIP = SocketOptionName.DropMembership;
|
|
Id_IP_HDR_INCLUDED = SocketOptionName.HeaderIncluded;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF UNIX}
|
|
Id_IPV6_UNICAST_HOPS = IPV6_UNICAST_HOPS;
|
|
Id_IPV6_MULTICAST_IF = IPV6_MULTICAST_IF;
|
|
Id_IPV6_MULTICAST_HOPS = IPV6_MULTICAST_HOPS;
|
|
Id_IPV6_MULTICAST_LOOP = IPV6_MULTICAST_LOOP;
|
|
{$IFDEF LINUX}
|
|
// These are probably leftovers from the non-final IPV6 KAME standard
|
|
// in Linux. They only seem to exist in Linux, others use
|
|
// the standarised versions.
|
|
// Probably the JOIN_GROUP ones replaced these,
|
|
// but they have different numbers in Linux, and possibly
|
|
// also different behaviour?
|
|
{$IFNDEF KYLIX}
|
|
{$IFDEF USE_BASEUNIX}
|
|
//In Linux, the libc.pp header maps the old values to new ones,
|
|
//probably for consistancy. I'm doing this because we can't link
|
|
//to Libc for Basic Unix stuff and some people may want to use this API
|
|
//in Linux instead of the libc API.
|
|
IPV6_ADD_MEMBERSHIP = IPV6_JOIN_GROUP;
|
|
IPV6_DROP_MEMBERSHIP = IPV6_LEAVE_GROUP;
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
{$ELSE}
|
|
// FIXME: Android compiler is using these definitions, but maybe some
|
|
// EXTERNALSYM-work is needed above.
|
|
IPV6_ADD_MEMBERSHIP = IPV6_JOIN_GROUP;
|
|
{$EXTERNALSYM IPV6_ADD_MEMBERSHIP}
|
|
IPV6_DROP_MEMBERSHIP = IPV6_LEAVE_GROUP;
|
|
{$EXTERNALSYM IPV6_DROP_MEMBERSHIP}
|
|
{$IFNDEF USE_VCL_POSIX}
|
|
IPV6_CHECKSUM = 26;
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
Id_IPV6_ADD_MEMBERSHIP = IPV6_ADD_MEMBERSHIP;
|
|
Id_IPV6_DROP_MEMBERSHIP = IPV6_DROP_MEMBERSHIP;
|
|
Id_IPV6_PKTINFO = IPV6_PKTINFO;
|
|
Id_IPV6_HOPLIMIT = IPV6_HOPLIMIT;
|
|
Id_IP_MULTICAST_TTL = IP_MULTICAST_TTL; // TODO integrate into IdStackConsts
|
|
Id_IP_MULTICAST_LOOP = IP_MULTICAST_LOOP; // TODO integrate into IdStackConsts
|
|
Id_IP_ADD_MEMBERSHIP = IP_ADD_MEMBERSHIP; // TODO integrate into IdStackConsts
|
|
Id_IP_DROP_MEMBERSHIP = IP_DROP_MEMBERSHIP; // TODO integrate into IdStackConsts
|
|
|
|
//In Windows CE 4.2, IP_HDRINCL may not be supported.
|
|
Id_IP_HDR_INCLUDED = IP_HDRINCL; // TODO integrate into IdStackConsts
|
|
{$ENDIF}
|
|
|
|
{$IFDEF WINDOWS}
|
|
Id_IPV6_HDRINCL = IPV6_HDRINCL;
|
|
Id_IPV6_UNICAST_HOPS = IPV6_UNICAST_HOPS;
|
|
Id_IPV6_MULTICAST_IF = IPV6_MULTICAST_IF;
|
|
Id_IPV6_MULTICAST_HOPS = IPV6_MULTICAST_HOPS;
|
|
Id_IPV6_MULTICAST_LOOP = IPV6_MULTICAST_LOOP;
|
|
Id_IPV6_ADD_MEMBERSHIP = IPV6_ADD_MEMBERSHIP;
|
|
Id_IPV6_DROP_MEMBERSHIP = IPV6_DROP_MEMBERSHIP;
|
|
Id_IPV6_PKTINFO = IPV6_PKTINFO;
|
|
Id_IPV6_HOPLIMIT = IPV6_HOPLIMIT;
|
|
Id_IP_MULTICAST_TTL = 10; // TODO integrate into IdStackConsts FIX ERROR in IdWinsock
|
|
Id_IP_MULTICAST_LOOP = 11; // TODO integrate into IdStackConsts FIX ERROR in IdWinsock
|
|
Id_IP_ADD_MEMBERSHIP = 12; // TODO integrate into IdStackConsts FIX ERROR in IdWinsock
|
|
Id_IP_DROP_MEMBERSHIP = 13; // TODO integrate into IdStackConsts FIX ERROR in IdWinsock
|
|
Id_IP_HDR_INCLUDED = 2; // TODO integrate into IdStackConsts FIX ERROR in IdWinsock
|
|
{$ENDIF}
|
|
|
|
(*
|
|
There seems to be an error in the correct values of multicast values in IdWinsock
|
|
The values should be:
|
|
|
|
ip_options = 1; //* set/get IP options */
|
|
ip_hdrincl = 2; //* header is included with data */
|
|
ip_tos = 3; //* IP type of service and preced*/
|
|
ip_ttl = 4; //* IP time to live */
|
|
ip_multicast_if = 9; //* set/get IP multicast i/f */
|
|
ip_multicast_ttl = 10; //* set/get IP multicast ttl */
|
|
ip_multicast_loop = 11; //*set/get IP multicast loopback */
|
|
ip_add_membership = 12; //* add an IP group membership */
|
|
ip_drop_membership = 13; //* drop an IP group membership */
|
|
ip_dontfragment = 14; //* don't fragment IP datagrams */ {Do not Localize}
|
|
*)
|
|
{$IFDEF UNIX}
|
|
TCP_NODELAY = 1;
|
|
{$ENDIF}
|
|
|
|
// Protocol Family
|
|
|
|
{$IFNDEF DOTNET}
|
|
{$IFDEF USE_VCL_POSIX}
|
|
Id_PF_INET4 = AF_INET;
|
|
Id_PF_INET6 = AF_INET6;
|
|
{$ELSE}
|
|
Id_PF_INET4 = PF_INET;
|
|
Id_PF_INET6 = PF_INET6;
|
|
{$ENDIF}
|
|
{$ELSE}
|
|
Id_PF_INET4 = ProtocolFamily.InterNetwork;
|
|
Id_PF_INET6 = ProtocolFamily.InterNetworkV6;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF USE_BASEUNIX}
|
|
// These constants are actually WinSock specific, not std TCP/IP
|
|
// FPC doesn't emulate WinSock.
|
|
INVALID_SOCKET = -1;
|
|
SOCKET_ERROR = -1;
|
|
{$ENDIF}
|
|
|
|
type
|
|
// Socket Type
|
|
{$IFDEF SOCKETTYPE_IS_CINT}
|
|
TIdSocketType = TIdC_INT;
|
|
{$ENDIF}
|
|
{$IFDEF SOCKETTYPE_IS___SOCKETTYPE}
|
|
TIdSocketType = __socket_type;
|
|
{$ENDIF}
|
|
{$IFDEF SOCKETTYPE_IS_LONGINT}
|
|
TIdSocketType = Integer;
|
|
{$ENDIF}
|
|
{$IFDEF SOCKETTYPE_IS_SOCKETTYPE}
|
|
TIdSocketType = SocketType;
|
|
{$ENDIF}
|
|
|
|
const
|
|
// {$IFNDEF DOTNET}
|
|
// {$IFDEF KYLIXCOMPAT}
|
|
// Id_SOCK_STREAM = TIdSocketType(SOCK_STREAM); //1 /* stream socket */
|
|
// Id_SOCK_DGRAM = TIdSocketType(SOCK_DGRAM); //2 /* datagram socket */
|
|
// Id_SOCK_RAW = TIdSocketType(SOCK_RAW); //3 /* raw-protocol interface */
|
|
// Id_SOCK_RDM = TIdSocketType(SOCK_RDM); //4 /* reliably-delivered message */
|
|
// Id_SOCK_SEQPACKET = SOCK_SEQPACKET; //5 /* sequenced packet stream */
|
|
// {$ELSE}
|
|
// Id_SOCK_STREAM = SOCK_STREAM; //1 /* stream socket */
|
|
// Id_SOCK_DGRAM = SOCK_DGRAM; //2 /* datagram socket */
|
|
// Id_SOCK_RAW = SOCK_RAW; //3 /* raw-protocol interface */
|
|
// Id_SOCK_RDM = SOCK_RDM; //4 /* reliably-delivered message */
|
|
// Id_SOCK_SEQPACKET = SOCK_SEQPACKET; //5 /* sequenced packet stream */
|
|
// {$ENDIF}
|
|
{$IFDEF SOCKETTYPE_IS_SOCKETTYPE}
|
|
Id_SOCK_STREAM = SocketType.Stream; // /* stream socket */
|
|
Id_SOCK_DGRAM = SocketType.Dgram; // /* datagram socket */
|
|
Id_SOCK_RAW = SocketType.Raw; // /* raw-protocol interface */
|
|
Id_SOCK_RDM = SocketType.Rdm; // /* reliably-delivered message */
|
|
Id_SOCK_SEQPACKET = SocketType.Seqpacket; // /* sequenced packet stream */
|
|
Id_SOCK_UNKNOWN = SocketType.Unknown; // /* unknown */
|
|
{$ELSE}
|
|
Id_SOCK_UNKNOWN = TIdSocketType(0);
|
|
Id_SOCK_STREAM = TIdSocketType(SOCK_STREAM); //1 /* stream socket */
|
|
Id_SOCK_DGRAM = TIdSocketType(SOCK_DGRAM); //2 /* datagram socket */
|
|
Id_SOCK_RAW = TIdSocketType(SOCK_RAW); //3 /* raw-protocol interface */
|
|
{$IFNDEF USE_VCL_POSIX}
|
|
Id_SOCK_RDM = TIdSocketType(SOCK_RDM); //4 /* reliably-delivered message */
|
|
{$ENDIF}
|
|
Id_SOCK_SEQPACKET = SOCK_SEQPACKET; //5 /* sequenced packet stream */
|
|
{$ENDIF}
|
|
|
|
type
|
|
// IP Protocol type
|
|
TIdSocketProtocol = {$IFDEF DOTNET}ProtocolType{$ELSE}Integer{$ENDIF};
|
|
TIdSocketOption = {$IFDEF DOTNET}SocketOptionName{$ELSE}Integer{$ENDIF};
|
|
TIdSocketOptionLevel = {$IFDEF DOTNET}SocketOptionLevel{$ELSE}Integer{$ENDIF};
|
|
|
|
|
|
|
|
const
|
|
{$IFNDEF DOTNET}
|
|
{$IFDEF OS2}
|
|
Id_IPPROTO_GGP = IPPROTO_GGP; //OS/2 does something strange and we might wind up
|
|
//supporting it later for all we know.
|
|
{$ELSE}
|
|
Id_IPPROTO_GGP = 3;// IPPROTO_GGP; may not be defined in some headers in FPC
|
|
{$ENDIF}
|
|
Id_IPPROTO_ICMP = IPPROTO_ICMP;
|
|
Id_IPPROTO_ICMPV6 = IPPROTO_ICMPV6;
|
|
{$IFNDEF USE_VCL_POSIX}
|
|
Id_IPPROTO_IDP = IPPROTO_IDP;
|
|
|
|
Id_IPPROTO_IGMP = IPPROTO_IGMP;
|
|
{$ENDIF}
|
|
Id_IPPROTO_IP = IPPROTO_IP;
|
|
Id_IPPROTO_IPv6 = IPPROTO_IPV6;
|
|
Id_IPPROTO_ND = 77; //IPPROTO_ND; is not defined in some headers in FPC
|
|
Id_IPPROTO_PUP = IPPROTO_PUP;
|
|
Id_IPPROTO_RAW = IPPROTO_RAW;
|
|
Id_IPPROTO_TCP = IPPROTO_TCP;
|
|
Id_IPPROTO_UDP = IPPROTO_UDP;
|
|
Id_IPPROTO_MAX = IPPROTO_MAX;
|
|
{$ELSE}
|
|
Id_IPPROTO_GGP = ProtocolType.Ggp; //Gateway To Gateway Protocol.
|
|
Id_IPPROTO_ICMP = ProtocolType.Icmp; //Internet Control Message Protocol.
|
|
Id_IPPROTO_ICMPv6 = ProtocolType.IcmpV6; //ICMP for IPv6
|
|
Id_IPPROTO_IDP = ProtocolType.Idp; //IDP Protocol.
|
|
Id_IPPROTO_IGMP = ProtocolType.Igmp; //Internet Group Management Protocol.
|
|
Id_IPPROTO_IP = ProtocolType.IP; //Internet Protocol.
|
|
Id_IPPROTO_IPv6 = ProtocolType.IPv6;
|
|
Id_IPPROTO_IPX = ProtocolType.Ipx; //IPX Protocol.
|
|
Id_IPPROTO_ND = ProtocolType.ND; //Net Disk Protocol (unofficial).
|
|
Id_IPPROTO_PUP = ProtocolType.Pup; //PUP Protocol.
|
|
Id_IPPROTO_RAW = ProtocolType.Raw; //Raw UP packet protocol.
|
|
Id_IPPROTO_SPX = ProtocolType.Spx; //SPX Protocol.
|
|
Id_IPPROTO_SPXII = ProtocolType.SpxII; //SPX Version 2 Protocol.
|
|
Id_IPPROTO_TCP = ProtocolType.Tcp; //Transmission Control Protocol.
|
|
Id_IPPROTO_UDP = ProtocolType.Udp; //User Datagram Protocol.
|
|
Id_IPPROTO_UNKNOWN = ProtocolType.Unknown; //Unknown protocol.
|
|
Id_IPPROTO_UNSPECIFIED = ProtocolType.Unspecified; //unspecified protocol.
|
|
// Id_IPPROTO_MAX = ProtocolType.; ?????????????????????
|
|
{$ENDIF}
|
|
|
|
|
|
|
|
// Socket Option level
|
|
{$IFNDEF DOTNET}
|
|
Id_SOL_SOCKET = SOL_SOCKET;
|
|
Id_SOL_IP = IPPROTO_IP;
|
|
Id_SOL_IPv6 = IPPROTO_IPV6;
|
|
Id_SOL_TCP = IPPROTO_TCP;
|
|
Id_SOL_UDP = IPPROTO_UDP;
|
|
{$ELSE}
|
|
Id_SOL_SOCKET = SocketOptionLevel.Socket;
|
|
Id_SOL_IP = SocketOptionLevel.Ip;
|
|
Id_SOL_IPv6 = SocketOptionLevel.IPv6;
|
|
Id_SOL_TCP = SocketOptionLevel.Tcp;
|
|
Id_SOL_UDP = SocketOptionLevel.Udp;
|
|
{$ENDIF}
|
|
|
|
// Socket options
|
|
{$IFNDEF DOTNET}
|
|
{$IFNDEF WINDOWS}
|
|
SO_DONTLINGER = not SO_LINGER;
|
|
{$EXTERNALSYM SO_DONTLINGER}
|
|
{$ENDIF}
|
|
Id_SO_BROADCAST = SO_BROADCAST;
|
|
Id_SO_DEBUG = SO_DEBUG;
|
|
Id_SO_DONTLINGER = SO_DONTLINGER;
|
|
Id_SO_DONTROUTE = SO_DONTROUTE;
|
|
Id_SO_KEEPALIVE = SO_KEEPALIVE;
|
|
Id_SO_LINGER = SO_LINGER;
|
|
Id_SO_OOBINLINE = SO_OOBINLINE;
|
|
Id_SO_RCVBUF = SO_RCVBUF;
|
|
Id_SO_REUSEADDR = SO_REUSEADDR;
|
|
Id_SO_SNDBUF = SO_SNDBUF;
|
|
Id_SO_TYPE = SO_TYPE;
|
|
{$IFDEF WINDOWS}
|
|
Id_SO_UPDATE_ACCEPT_CONTEXT = SO_UPDATE_ACCEPT_CONTEXT;
|
|
Id_SO_UPDATE_CONNECT_CONTEXT = SO_UPDATE_CONNECT_CONTEXT;
|
|
{$ENDIF}
|
|
{$ELSE}
|
|
{
|
|
SocketOptionName.AcceptConnection;// Socket is listening.
|
|
SocketOptionName.AddMembership;// Add an IP group membership.
|
|
SocketOptionName.AddSourceMembership;// Join a source group.
|
|
SocketOptionName.BlockSource;// Block data from a source.
|
|
}
|
|
Id_SO_BROADCAST = SocketOptionName.Broadcast;// Permit sending broadcast messages on the socket.
|
|
{
|
|
SocketOptionName.BsdUrgent;// Use urgent data as defined in RFC-1222. This option can be set only once, and once set, cannot be turned off.
|
|
SocketOptionName.ChecksumCoverage;// Set or get UDP checksum coverage.
|
|
}
|
|
Id_SO_DEBUG = SocketOptionName.Debug;// Record debugging information.
|
|
{
|
|
SocketOptionName.DontFragment;// Do not fragment IP datagrams.
|
|
}
|
|
Id_SO_DONTLINGER = SocketOptionName.DontLinger;// Close socket gracefully without lingering.
|
|
Id_SO_DONTROUTE = SocketOptionName.DontRoute;// Do not route; send directly to interface addresses.
|
|
{
|
|
SocketOptionName.DropMembership;// Drop an IP group membership.
|
|
SocketOptionName.DropSourceMembership;// Drop a source group.
|
|
SocketOptionName.Error;// Get error status and clear.
|
|
SocketOptionName.ExclusiveAddressUse;// Enables a socket to be bound for exclusive access.
|
|
SocketOptionName.Expedited;// Use expedited data as defined in RFC-1222. This option can be set only once, and once set, cannot be turned off.
|
|
SocketOptionName.HeaderIncluded;// Indicates application is providing the IP header for outgoing datagrams.
|
|
SocketOptionName.IPOptions;// Specifies IP options to be inserted into outgoing datagrams.
|
|
}
|
|
Id_SO_KEEPALIVE = SocketOptionName.KeepAlive;// Send keep-alives.
|
|
Id_SO_LINGER = SocketOptionName.Linger;// Linger on close if unsent data is present.
|
|
{
|
|
SocketOptionName.MaxConnections;// Maximum queue length that can be specified by Listen.
|
|
SocketOptionName.MulticastInterface;// Set the interface for outgoing multicast packets.
|
|
SocketOptionName.MulticastLoopback;// IP multicast loopback.
|
|
SocketOptionName.MulticastTimeToLive;// IP multicast time to live.
|
|
SocketOptionName.NoChecksum;// Send UDP datagrams with checksum set to zero.
|
|
SocketOptionName.NoDelay;// Disables the Nagle algorithm for send coalescing.
|
|
}
|
|
Id_SO_OOBINLINE = SocketOptionName.OutOfBandInline;// Receives out-of-band data in the normal data stream.
|
|
{
|
|
SocketOptionName.PacketInformation;// Return information about received packets.
|
|
}
|
|
Id_SO_RCVBUF = SocketOptionName.ReceiveBuffer;// Specifies the total per-socket buffer space reserved for receives. This is unrelated to the maximum message size or the size of a TCP window.
|
|
{
|
|
SocketOptionName.ReceiveLowWater;// Receive low water mark.
|
|
SocketOptionName.ReceiveTimeout;// Receive time out. This option applies only to synchronous methods; it has no effect on asynchronous methods such as BeginSend.
|
|
}
|
|
Id_SO_REUSEADDR = SocketOptionName.ReuseAddress;// Allows the socket to be bound to an address that is already in use.
|
|
Id_SO_SNDBUF = SocketOptionName.SendBuffer;// Specifies the total per-socket buffer space reserved for sends. This is unrelated to the maximum message size or the size of a TCP window.
|
|
{
|
|
SocketOptionName.SendLowWater;// Specifies the total per-socket buffer space reserved for receives. This is unrelated to the maximum message size or the size of a TCP window.
|
|
SocketOptionName.SendTimeout;// Send timeout. This option applies only to synchronous methods; it has no effect on asynchronous methods such as BeginSend.
|
|
}
|
|
Id_SO_TYPE = SocketOptionName.Type;// Get socket type.
|
|
{
|
|
SocketOptionName.TypeOfService;// Change the IP header type of service field.
|
|
SocketOptionName.UnblockSource;// Unblock a previously blocked source.
|
|
}
|
|
Id_SO_UPDATE_ACCEPT_CONTEXT = SocketOptionName.UpdateAcceptContext;// Updates an accepted socket's properties by using those of an existing socket.
|
|
Id_SO_UPDATE_CONNECT_CONTEXT = SocketOptionName.UpdateConnectContext;// Updates a connected socket's properties by using those of an existing socket.
|
|
{
|
|
SocketOptionName.UseLoopback;// Bypass hardware when possible.
|
|
}
|
|
{$ENDIF}
|
|
|
|
// Additional socket options
|
|
{$IFNDEF DOTNET}
|
|
Id_SO_RCVTIMEO = SO_RCVTIMEO;
|
|
Id_SO_SNDTIMEO = SO_SNDTIMEO;
|
|
{$ELSE}
|
|
Id_SO_RCVTIMEO = SocketOptionName.ReceiveTimeout;
|
|
Id_SO_SNDTIMEO = SocketOptionName.SendTimeout;
|
|
{$ENDIF}
|
|
|
|
{$IFNDEF DOTNET}
|
|
Id_SO_IP_TTL = IP_TTL;
|
|
{$ELSE}
|
|
Id_SO_IP_TTL = SocketOptionName.IpTimeToLive; // Set the IP header time-to-live field.
|
|
{$ENDIF}
|
|
|
|
{$IFNDEF DOTNET}
|
|
{for some reason, the compiler doesn't accept INADDR_ANY below saying a constant is expected. }
|
|
{$IFDEF USE_VCL_POSIX}
|
|
Id_INADDR_ANY = 0;// INADDR_ANY;
|
|
Id_INADDR_NONE = $ffffffff;// INADDR_NONE;
|
|
{$ELSE}
|
|
Id_INADDR_ANY = INADDR_ANY;
|
|
Id_INADDR_NONE = INADDR_NONE;
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
|
|
// TCP Options
|
|
{$IFNDEF DOTNET}
|
|
{$IFDEF USE_VCL_POSIX}
|
|
INVALID_SOCKET = -1;
|
|
SOCKET_ERROR = -1;
|
|
{$ENDIF}
|
|
Id_TCP_NODELAY = TCP_NODELAY;
|
|
Id_INVALID_SOCKET = INVALID_SOCKET;
|
|
Id_SOCKET_ERROR = SOCKET_ERROR;
|
|
Id_SOCKETOPTIONLEVEL_TCP = Id_IPPROTO_TCP; // BGO: rename to Id_SOL_TCP
|
|
{$IFDEF HAS_TCP_CORK}
|
|
Id_TCP_CORK = TCP_CORK;
|
|
{$ENDIF}
|
|
{$IFDEF HAS_TCP_NOPUSH}
|
|
Id_TCP_NOPUSH = TCP_NOPUSH;
|
|
{$ENDIF}
|
|
{$IFDEF HAS_TCP_KEEPIDLE}
|
|
Id_TCP_KEEPIDLE = TCP_KEEPIDLE;
|
|
{$ENDIF}
|
|
{$IFDEF HAS_TCP_KEEPINTVL}
|
|
Id_TCP_KEEPINTVL = TCP_KEEPINTVL;
|
|
{$ENDIF}
|
|
{$ELSE}
|
|
Id_TCP_NODELAY = SocketOptionName.NoDelay;
|
|
Id_INVALID_SOCKET = nil;
|
|
Id_SOCKET_ERROR = -1;
|
|
Id_SOCKETOPTIONLEVEL_TCP = SocketOptionLevel.TCP; // BGO: rename to Id_SOL_TCP
|
|
{$ENDIF}
|
|
|
|
{$IFDEF USE_VCL_POSIX}
|
|
// Shutdown Options
|
|
Id_SD_Recv = SHUT_RD;
|
|
Id_SD_Send = SHUT_WR;
|
|
Id_SD_Both = SHUT_RDWR;
|
|
//
|
|
//Temp defines. They should be in Delphi's Posix.Errno.pas
|
|
ESOCKTNOSUPPORT = 44; //* Socket type not supported */
|
|
{$EXTERNALSYM ESOCKTNOSUPPORT}
|
|
EPFNOSUPPORT = 46; //* Protocol family not supported */
|
|
{$EXTERNALSYM EPFNOSUPPORT}
|
|
ESHUTDOWN = 58; //* Can't send after socket shutdown */
|
|
{$EXTERNALSYM ESHUTDOWN}
|
|
ETOOMANYREFS = 59; //* Too many references: can't splice */
|
|
{$EXTERNALSYM ETOOMANYREFS}
|
|
EHOSTDOWN = 64; //* Host is down */
|
|
{$EXTERNALSYM EHOSTDOWN}
|
|
//
|
|
Id_WSAEINTR = EINTR;
|
|
Id_WSAEBADF = EBADF;
|
|
Id_WSAEACCES = EACCES;
|
|
Id_WSAEFAULT = EFAULT;
|
|
Id_WSAEINVAL = EINVAL;
|
|
Id_WSAEMFILE = EMFILE;
|
|
Id_WSAEWOULDBLOCK = EWOULDBLOCK;
|
|
Id_WSAEINPROGRESS = EINPROGRESS;
|
|
Id_WSAEALREADY = EALREADY;
|
|
Id_WSAENOTSOCK = ENOTSOCK;
|
|
Id_WSAEDESTADDRREQ = EDESTADDRREQ;
|
|
Id_WSAEMSGSIZE = EMSGSIZE;
|
|
Id_WSAEPROTOTYPE = EPROTOTYPE;
|
|
Id_WSAENOPROTOOPT = ENOPROTOOPT;
|
|
Id_WSAEPROTONOSUPPORT = EPROTONOSUPPORT;
|
|
Id_WSAESOCKTNOSUPPORT = ESOCKTNOSUPPORT;
|
|
Id_WSAEOPNOTSUPP = EOPNOTSUPP;
|
|
Id_WSAEPFNOSUPPORT = EPFNOSUPPORT;
|
|
Id_WSAEAFNOSUPPORT = EAFNOSUPPORT;
|
|
Id_WSAEADDRINUSE = EADDRINUSE;
|
|
Id_WSAEADDRNOTAVAIL = EADDRNOTAVAIL;
|
|
Id_WSAENETDOWN = ENETDOWN;
|
|
Id_WSAENETUNREACH = ENETUNREACH;
|
|
Id_WSAENETRESET = ENETRESET;
|
|
Id_WSAECONNABORTED = ECONNABORTED;
|
|
Id_WSAECONNRESET = ECONNRESET;
|
|
Id_WSAENOBUFS = ENOBUFS;
|
|
Id_WSAEISCONN = EISCONN;
|
|
Id_WSAENOTCONN = ENOTCONN;
|
|
Id_WSAESHUTDOWN = ESHUTDOWN;
|
|
Id_WSAETOOMANYREFS = ETOOMANYREFS;
|
|
Id_WSAETIMEDOUT = ETIMEDOUT;
|
|
Id_WSAECONNREFUSED = ECONNREFUSED;
|
|
Id_WSAELOOP = ELOOP;
|
|
Id_WSAENAMETOOLONG = ENAMETOOLONG;
|
|
Id_WSAEHOSTDOWN = EHOSTDOWN;
|
|
Id_WSAEHOSTUNREACH = EHOSTUNREACH;
|
|
Id_WSAENOTEMPTY = ENOTEMPTY;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF KYLIXCOMPAT}
|
|
// Shutdown Options
|
|
Id_SD_Recv = SHUT_RD;
|
|
Id_SD_Send = SHUT_WR;
|
|
Id_SD_Both = SHUT_RDWR;
|
|
//
|
|
Id_WSAEINTR = EINTR;
|
|
Id_WSAEBADF = EBADF;
|
|
Id_WSAEACCES = EACCES;
|
|
Id_WSAEFAULT = EFAULT;
|
|
Id_WSAEINVAL = EINVAL;
|
|
Id_WSAEMFILE = EMFILE;
|
|
Id_WSAEWOULDBLOCK = EWOULDBLOCK;
|
|
Id_WSAEINPROGRESS = EINPROGRESS;
|
|
Id_WSAEALREADY = EALREADY;
|
|
Id_WSAENOTSOCK = ENOTSOCK;
|
|
Id_WSAEDESTADDRREQ = EDESTADDRREQ;
|
|
Id_WSAEMSGSIZE = EMSGSIZE;
|
|
Id_WSAEPROTOTYPE = EPROTOTYPE;
|
|
Id_WSAENOPROTOOPT = ENOPROTOOPT;
|
|
Id_WSAEPROTONOSUPPORT = EPROTONOSUPPORT;
|
|
Id_WSAESOCKTNOSUPPORT = ESOCKTNOSUPPORT;
|
|
Id_WSAEOPNOTSUPP = EOPNOTSUPP;
|
|
Id_WSAEPFNOSUPPORT = EPFNOSUPPORT;
|
|
Id_WSAEAFNOSUPPORT = EAFNOSUPPORT;
|
|
Id_WSAEADDRINUSE = EADDRINUSE;
|
|
Id_WSAEADDRNOTAVAIL = EADDRNOTAVAIL;
|
|
Id_WSAENETDOWN = ENETDOWN;
|
|
Id_WSAENETUNREACH = ENETUNREACH;
|
|
Id_WSAENETRESET = ENETRESET;
|
|
Id_WSAECONNABORTED = ECONNABORTED;
|
|
Id_WSAECONNRESET = ECONNRESET;
|
|
Id_WSAENOBUFS = ENOBUFS;
|
|
Id_WSAEISCONN = EISCONN;
|
|
Id_WSAENOTCONN = ENOTCONN;
|
|
Id_WSAESHUTDOWN = ESHUTDOWN;
|
|
Id_WSAETOOMANYREFS = ETOOMANYREFS;
|
|
Id_WSAETIMEDOUT = ETIMEDOUT;
|
|
Id_WSAECONNREFUSED = ECONNREFUSED;
|
|
Id_WSAELOOP = ELOOP;
|
|
Id_WSAENAMETOOLONG = ENAMETOOLONG;
|
|
Id_WSAEHOSTDOWN = EHOSTDOWN;
|
|
Id_WSAEHOSTUNREACH = EHOSTUNREACH;
|
|
Id_WSAENOTEMPTY = ENOTEMPTY;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF USE_BASEUNIX}
|
|
// Shutdown Options
|
|
Id_SD_Recv = SHUT_RD;
|
|
Id_SD_Send = SHUT_WR;
|
|
Id_SD_Both = SHUT_RDWR;
|
|
{$IFDEF BEOS}
|
|
{work around incomplete definitions in BeOS FPC compiler.}
|
|
EDESTADDRREQ = (B_POSIX_ERROR_BASE + 48);
|
|
{$EXTERNALSYM EDESTADDRREQ}
|
|
EHOSTDOWN = (B_POSIX_ERROR_BASE + 45);
|
|
{$EXTERNALSYM EHOSTDOWN}
|
|
ESysENOTSOCK = ENOTSOCK;
|
|
ESysEDESTADDRREQ = EDESTADDRREQ;
|
|
ESysEMSGSIZE = EMSGSIZE;
|
|
ESysEOPNOTSUPP = EOPNOTSUPP;
|
|
ESysEHOSTDOWN = EHOSTDOWN;
|
|
{$ENDIF}
|
|
//
|
|
Id_WSAEINTR = ESysEINTR;
|
|
Id_WSAEBADF = ESysEBADF;
|
|
Id_WSAEACCES = ESysEACCES;
|
|
Id_WSAEFAULT = ESysEFAULT;
|
|
Id_WSAEINVAL = ESysEINVAL;
|
|
Id_WSAEMFILE = ESysEMFILE;
|
|
Id_WSAEWOULDBLOCK = ESysEWOULDBLOCK;
|
|
Id_WSAEINPROGRESS = ESysEINPROGRESS;
|
|
Id_WSAEALREADY = ESysEALREADY;
|
|
Id_WSAENOTSOCK = ESysENOTSOCK;
|
|
Id_WSAEDESTADDRREQ = ESysEDESTADDRREQ;
|
|
Id_WSAEMSGSIZE = ESysEMSGSIZE;
|
|
Id_WSAEPROTOTYPE = ESysEPROTOTYPE;
|
|
Id_WSAENOPROTOOPT = ESysENOPROTOOPT;
|
|
Id_WSAEPROTONOSUPPORT = ESysEPROTONOSUPPORT;
|
|
{$IFNDEF BEOS}
|
|
Id_WSAESOCKTNOSUPPORT = ESysESOCKTNOSUPPORT;
|
|
{$ENDIF}
|
|
Id_WSAEOPNOTSUPP = ESysEOPNOTSUPP;
|
|
Id_WSAEPFNOSUPPORT = ESysEPFNOSUPPORT;
|
|
Id_WSAEAFNOSUPPORT = ESysEAFNOSUPPORT;
|
|
Id_WSAEADDRINUSE = ESysEADDRINUSE;
|
|
Id_WSAEADDRNOTAVAIL = ESysEADDRNOTAVAIL;
|
|
Id_WSAENETDOWN = ESysENETDOWN;
|
|
Id_WSAENETUNREACH = ESysENETUNREACH;
|
|
Id_WSAENETRESET = ESysENETRESET;
|
|
Id_WSAECONNABORTED = ESysECONNABORTED;
|
|
Id_WSAECONNRESET = ESysECONNRESET;
|
|
Id_WSAENOBUFS = ESysENOBUFS;
|
|
Id_WSAEISCONN = ESysEISCONN;
|
|
Id_WSAENOTCONN = ESysENOTCONN;
|
|
Id_WSAESHUTDOWN = ESysESHUTDOWN;
|
|
{$IFNDEF BEOS}
|
|
Id_WSAETOOMANYREFS = ESysETOOMANYREFS;
|
|
{$ENDIF}
|
|
Id_WSAETIMEDOUT = ESysETIMEDOUT;
|
|
Id_WSAECONNREFUSED = ESysECONNREFUSED;
|
|
Id_WSAELOOP = ESysELOOP;
|
|
Id_WSAENAMETOOLONG = ESysENAMETOOLONG;
|
|
Id_WSAEHOSTDOWN = ESysEHOSTDOWN;
|
|
Id_WSAEHOSTUNREACH = ESysEHOSTUNREACH;
|
|
Id_WSAENOTEMPTY = ESysENOTEMPTY;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF WINDOWS}
|
|
// Shutdown Options
|
|
Id_SD_Recv = 0;
|
|
Id_SD_Send = 1;
|
|
Id_SD_Both = 2;
|
|
//
|
|
Id_WSAEINTR = WSAEINTR;
|
|
Id_WSAEBADF = WSAEBADF;
|
|
Id_WSAEACCES = WSAEACCES;
|
|
Id_WSAEFAULT = WSAEFAULT;
|
|
Id_WSAEINVAL = WSAEINVAL;
|
|
Id_WSAEMFILE = WSAEMFILE;
|
|
Id_WSAEWOULDBLOCK = WSAEWOULDBLOCK;
|
|
Id_WSAEINPROGRESS = WSAEINPROGRESS;
|
|
Id_WSAEALREADY = WSAEALREADY;
|
|
Id_WSAENOTSOCK = WSAENOTSOCK;
|
|
Id_WSAEDESTADDRREQ = WSAEDESTADDRREQ;
|
|
Id_WSAEMSGSIZE = WSAEMSGSIZE;
|
|
Id_WSAEPROTOTYPE = WSAEPROTOTYPE;
|
|
Id_WSAENOPROTOOPT = WSAENOPROTOOPT;
|
|
Id_WSAEPROTONOSUPPORT = WSAEPROTONOSUPPORT;
|
|
Id_WSAESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT;
|
|
Id_WSAEOPNOTSUPP = WSAEOPNOTSUPP;
|
|
Id_WSAEPFNOSUPPORT = WSAEPFNOSUPPORT;
|
|
Id_WSAEAFNOSUPPORT = WSAEAFNOSUPPORT;
|
|
Id_WSAEADDRINUSE = WSAEADDRINUSE;
|
|
Id_WSAEADDRNOTAVAIL = WSAEADDRNOTAVAIL;
|
|
Id_WSAENETDOWN = WSAENETDOWN;
|
|
Id_WSAENETUNREACH = WSAENETUNREACH;
|
|
Id_WSAENETRESET = WSAENETRESET;
|
|
Id_WSAECONNABORTED = WSAECONNABORTED;
|
|
Id_WSAECONNRESET = WSAECONNRESET;
|
|
Id_WSAENOBUFS = WSAENOBUFS;
|
|
Id_WSAEISCONN = WSAEISCONN;
|
|
Id_WSAENOTCONN = WSAENOTCONN;
|
|
Id_WSAESHUTDOWN = WSAESHUTDOWN;
|
|
Id_WSAETOOMANYREFS = WSAETOOMANYREFS;
|
|
Id_WSAETIMEDOUT = WSAETIMEDOUT;
|
|
Id_WSAECONNREFUSED = WSAECONNREFUSED;
|
|
Id_WSAELOOP = WSAELOOP;
|
|
Id_WSAENAMETOOLONG = WSAENAMETOOLONG;
|
|
Id_WSAEHOSTDOWN = WSAEHOSTDOWN;
|
|
Id_WSAEHOSTUNREACH = WSAEHOSTUNREACH;
|
|
Id_WSAENOTEMPTY = WSAENOTEMPTY;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF DOTNET}
|
|
//In DotNET, the constants are the same as in Winsock2.
|
|
|
|
//Ripped from IdWinsock2 - don't use that in DotNET.
|
|
|
|
WSABASEERR = 10000;
|
|
|
|
// Windows Sockets definitions of regular Microsoft C error constants
|
|
WSAEINTR = WSABASEERR + 4;
|
|
WSAEBADF = WSABASEERR + 9;
|
|
WSAEACCES = WSABASEERR + 13;
|
|
WSAEFAULT = WSABASEERR + 14;
|
|
WSAEINVAL = WSABASEERR + 22;
|
|
WSAEMFILE = WSABASEERR + 24;
|
|
|
|
// Windows Sockets definitions of regular Berkeley error constants
|
|
WSAEWOULDBLOCK = WSABASEERR + 35;
|
|
WSAEINPROGRESS = WSABASEERR + 36;
|
|
WSAEALREADY = WSABASEERR + 37;
|
|
WSAENOTSOCK = WSABASEERR + 38;
|
|
WSAEDESTADDRREQ = WSABASEERR + 39;
|
|
WSAEMSGSIZE = WSABASEERR + 40;
|
|
WSAEPROTOTYPE = WSABASEERR + 41;
|
|
WSAENOPROTOOPT = WSABASEERR + 42;
|
|
WSAEPROTONOSUPPORT = WSABASEERR + 43;
|
|
WSAESOCKTNOSUPPORT = WSABASEERR + 44;
|
|
WSAEOPNOTSUPP = WSABASEERR + 45;
|
|
WSAEPFNOSUPPORT = WSABASEERR + 46;
|
|
WSAEAFNOSUPPORT = WSABASEERR + 47;
|
|
WSAEADDRINUSE = WSABASEERR + 48;
|
|
WSAEADDRNOTAVAIL = WSABASEERR + 49;
|
|
WSAENETDOWN = WSABASEERR + 50;
|
|
WSAENETUNREACH = WSABASEERR + 51;
|
|
WSAENETRESET = WSABASEERR + 52;
|
|
WSAECONNABORTED = WSABASEERR + 53;
|
|
WSAECONNRESET = WSABASEERR + 54;
|
|
WSAENOBUFS = WSABASEERR + 55;
|
|
WSAEISCONN = WSABASEERR + 56;
|
|
WSAENOTCONN = WSABASEERR + 57;
|
|
WSAESHUTDOWN = WSABASEERR + 58;
|
|
WSAETOOMANYREFS = WSABASEERR + 59;
|
|
WSAETIMEDOUT = WSABASEERR + 60;
|
|
WSAECONNREFUSED = WSABASEERR + 61;
|
|
WSAELOOP = WSABASEERR + 62;
|
|
WSAENAMETOOLONG = WSABASEERR + 63;
|
|
WSAEHOSTDOWN = WSABASEERR + 64;
|
|
WSAEHOSTUNREACH = WSABASEERR + 65;
|
|
WSAENOTEMPTY = WSABASEERR + 66;
|
|
WSAEPROCLIM = WSABASEERR + 67;
|
|
WSAEUSERS = WSABASEERR + 68;
|
|
WSAEDQUOT = WSABASEERR + 69;
|
|
WSAESTALE = WSABASEERR + 70;
|
|
WSAEREMOTE = WSABASEERR + 71;
|
|
|
|
// Extended Windows Sockets error constant definitions
|
|
WSASYSNOTREADY = WSABASEERR + 91;
|
|
WSAVERNOTSUPPORTED = WSABASEERR + 92;
|
|
WSANOTINITIALIZED = WSABASEERR + 93;
|
|
WSAEDISCON = WSABASEERR + 101;
|
|
WSAENOMORE = WSABASEERR + 102;
|
|
WSAECANCELLED = WSABASEERR + 103;
|
|
WSAEINVALIDPROCTABLE = WSABASEERR + 104;
|
|
WSAEINVALIDPROVIDER = WSABASEERR + 105;
|
|
WSAEPROVIDERFAILEDINIT = WSABASEERR + 106;
|
|
WSASYSCALLFAILURE = WSABASEERR + 107;
|
|
WSASERVICE_NOT_FOUND = WSABASEERR + 108;
|
|
WSATYPE_NOT_FOUND = WSABASEERR + 109;
|
|
WSA_E_NO_MORE = WSABASEERR + 110;
|
|
WSA_E_CANCELLED = WSABASEERR + 111;
|
|
WSAEREFUSED = WSABASEERR + 112;
|
|
|
|
{ Error return codes from gethostbyname() and gethostbyaddr()
|
|
when using the resolver. Note that these errors are retrieved
|
|
via WSAGetLastError() and must therefore follow the rules for
|
|
avoiding clashes with error numbers from specific implementations
|
|
or language run-time systems. For this reason the codes are based
|
|
at WSABASEERR+1001. Note also that [WSA]NO_ADDRESS is defined
|
|
only for compatibility purposes. }
|
|
|
|
// Authoritative Answer: Host not found
|
|
WSAHOST_NOT_FOUND = WSABASEERR + 1001;
|
|
HOST_NOT_FOUND = WSAHOST_NOT_FOUND;
|
|
|
|
// Non-Authoritative: Host not found, or SERVERFAIL
|
|
WSATRY_AGAIN = WSABASEERR + 1002;
|
|
TRY_AGAIN = WSATRY_AGAIN;
|
|
|
|
// Non recoverable errors, FORMERR, REFUSED, NOTIMP
|
|
WSANO_RECOVERY = WSABASEERR + 1003;
|
|
NO_RECOVERY = WSANO_RECOVERY;
|
|
|
|
// Valid name, no data record of requested type
|
|
WSANO_DATA = WSABASEERR + 1004;
|
|
NO_DATA = WSANO_DATA;
|
|
|
|
// no address, look for MX record
|
|
WSANO_ADDRESS = WSANO_DATA;
|
|
NO_ADDRESS = WSANO_ADDRESS;
|
|
|
|
// Define QOS related error return codes
|
|
WSA_QOS_RECEIVERS = WSABASEERR + 1005; // at least one reserve has arrived
|
|
WSA_QOS_SENDERS = WSABASEERR + 1006; // at least one path has arrived
|
|
WSA_QOS_NO_SENDERS = WSABASEERR + 1007; // there are no senders
|
|
WSA_QOS_NO_RECEIVERS = WSABASEERR + 1008; // there are no receivers
|
|
WSA_QOS_REQUEST_CONFIRMED = WSABASEERR + 1009; // reserve has been confirmed
|
|
WSA_QOS_ADMISSION_FAILURE = WSABASEERR + 1010; // error due to lack of resources
|
|
WSA_QOS_POLICY_FAILURE = WSABASEERR + 1011; // rejected for administrative reasons - bad credentials
|
|
WSA_QOS_BAD_STYLE = WSABASEERR + 1012; // unknown or conflicting style
|
|
WSA_QOS_BAD_OBJECT = WSABASEERR + 1013; // problem with some part of the filterspec or providerspecific buffer in general
|
|
WSA_QOS_TRAFFIC_CTRL_ERROR = WSABASEERR + 1014; // problem with some part of the flowspec
|
|
WSA_QOS_GENERIC_ERROR = WSABASEERR + 1015; // general error
|
|
WSA_QOS_ESERVICETYPE = WSABASEERR + 1016; // invalid service type in flowspec
|
|
WSA_QOS_EFLOWSPEC = WSABASEERR + 1017; // invalid flowspec
|
|
WSA_QOS_EPROVSPECBUF = WSABASEERR + 1018; // invalid provider specific buffer
|
|
WSA_QOS_EFILTERSTYLE = WSABASEERR + 1019; // invalid filter style
|
|
WSA_QOS_EFILTERTYPE = WSABASEERR + 1020; // invalid filter type
|
|
WSA_QOS_EFILTERCOUNT = WSABASEERR + 1021; // incorrect number of filters
|
|
WSA_QOS_EOBJLENGTH = WSABASEERR + 1022; // invalid object length
|
|
WSA_QOS_EFLOWCOUNT = WSABASEERR + 1023; // incorrect number of flows
|
|
WSA_QOS_EUNKNOWNSOBJ = WSABASEERR + 1024; // unknown object in provider specific buffer
|
|
WSA_QOS_EPOLICYOBJ = WSABASEERR + 1025; // invalid policy object in provider specific buffer
|
|
WSA_QOS_EFLOWDESC = WSABASEERR + 1026; // invalid flow descriptor in the list
|
|
WSA_QOS_EPSFLOWSPEC = WSABASEERR + 1027; // inconsistent flow spec in provider specific buffer
|
|
WSA_QOS_EPSFILTERSPEC = WSABASEERR + 1028; // invalid filter spec in provider specific buffer
|
|
WSA_QOS_ESDMODEOBJ = WSABASEERR + 1029; // invalid shape discard mode object in provider specific buffer
|
|
WSA_QOS_ESHAPERATEOBJ = WSABASEERR + 1030; // invalid shaping rate object in provider specific buffer
|
|
WSA_QOS_RESERVED_PETYPE = WSABASEERR + 1031; // reserved policy element in provider specific buffer
|
|
|
|
{This section defines error constants used in Winsock 2 indirectly. These
|
|
are from Borland's header.}
|
|
{ The handle is invalid. }
|
|
ERROR_INVALID_HANDLE = 6;
|
|
|
|
{ Not enough storage is available to process this command. }
|
|
ERROR_NOT_ENOUGH_MEMORY = 8; { dderror }
|
|
|
|
{ The parameter is incorrect. }
|
|
ERROR_INVALID_PARAMETER = 87; { dderror }
|
|
|
|
{ The I/O operation has been aborted because of either a thread exit }
|
|
{ or an application request. }
|
|
ERROR_OPERATION_ABORTED = 995;
|
|
|
|
{ Overlapped I/O event is not in a signalled state. }
|
|
ERROR_IO_INCOMPLETE = 996;
|
|
|
|
{ Overlapped I/O operation is in progress. }
|
|
ERROR_IO_PENDING = 997; { dderror }
|
|
|
|
{ WinSock 2 extension -- new error codes and type definition }
|
|
WSA_IO_PENDING = ERROR_IO_PENDING;
|
|
WSA_IO_INCOMPLETE = ERROR_IO_INCOMPLETE;
|
|
WSA_INVALID_HANDLE = ERROR_INVALID_HANDLE;
|
|
WSA_INVALID_PARAMETER = ERROR_INVALID_PARAMETER;
|
|
WSA_NOT_ENOUGH_MEMORY = ERROR_NOT_ENOUGH_MEMORY;
|
|
WSA_OPERATION_ABORTED = ERROR_OPERATION_ABORTED;
|
|
|
|
//TODO: Map these to .net constants. Unfortunately .net does not seem to
|
|
//define these anywhere.
|
|
|
|
Id_WSAEINTR = WSAEINTR;
|
|
Id_WSAEBADF = WSAEBADF;
|
|
Id_WSAEACCES = WSAEACCES;
|
|
Id_WSAEFAULT = WSAEFAULT;
|
|
Id_WSAEINVAL = WSAEINVAL;
|
|
Id_WSAEMFILE = WSAEMFILE;
|
|
Id_WSAEWOULDBLOCK = WSAEWOULDBLOCK;
|
|
Id_WSAEINPROGRESS = WSAEINPROGRESS;
|
|
Id_WSAEALREADY = WSAEALREADY;
|
|
Id_WSAENOTSOCK = WSAENOTSOCK;
|
|
Id_WSAEDESTADDRREQ = WSAEDESTADDRREQ;
|
|
Id_WSAEMSGSIZE = WSAEMSGSIZE;
|
|
Id_WSAEPROTOTYPE = WSAEPROTOTYPE;
|
|
Id_WSAENOPROTOOPT = WSAENOPROTOOPT;
|
|
Id_WSAEPROTONOSUPPORT = WSAEPROTONOSUPPORT;
|
|
Id_WSAESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT;
|
|
Id_WSAEOPNOTSUPP = WSAEOPNOTSUPP;
|
|
Id_WSAEPFNOSUPPORT = WSAEPFNOSUPPORT;
|
|
Id_WSAEAFNOSUPPORT = WSAEAFNOSUPPORT;
|
|
Id_WSAEADDRINUSE = WSAEADDRINUSE;
|
|
Id_WSAEADDRNOTAVAIL = WSAEADDRNOTAVAIL;
|
|
Id_WSAENETDOWN = WSAENETDOWN;
|
|
Id_WSAENETUNREACH = WSAENETUNREACH;
|
|
Id_WSAENETRESET = WSAENETRESET;
|
|
Id_WSAECONNABORTED = WSAECONNABORTED;
|
|
Id_WSAECONNRESET = WSAECONNRESET;
|
|
Id_WSAENOBUFS = WSAENOBUFS;
|
|
Id_WSAEISCONN = WSAEISCONN;
|
|
Id_WSAENOTCONN = WSAENOTCONN;
|
|
Id_WSAESHUTDOWN = WSAESHUTDOWN;
|
|
Id_WSAETOOMANYREFS = WSAETOOMANYREFS;
|
|
Id_WSAETIMEDOUT = WSAETIMEDOUT;
|
|
Id_WSAECONNREFUSED = WSAECONNREFUSED;
|
|
Id_WSAELOOP = WSAELOOP;
|
|
Id_WSAENAMETOOLONG = WSAENAMETOOLONG;
|
|
Id_WSAEHOSTDOWN = WSAEHOSTDOWN;
|
|
Id_WSAEHOSTUNREACH = WSAEHOSTUNREACH;
|
|
Id_WSAENOTEMPTY = WSAENOTEMPTY;
|
|
|
|
Id_SD_Recv = SocketShutdown.Receive;
|
|
Id_SD_Send = SocketShutdown.Send;
|
|
Id_SD_Both = SocketShutdown.Both;
|
|
{$ENDIF}
|
|
|
|
implementation
|
|
|
|
{$IFDEF USE_VCL_POSIX}
|
|
{$I IdSymbolPlatformOn.inc}
|
|
{$ENDIF}
|
|
end.
|