mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 12:23:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			2447 lines
		
	
	
		
			89 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			2447 lines
		
	
	
		
			89 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{
 | 
						|
    $Id$
 | 
						|
    This file is part of the Free Pascal run time library.
 | 
						|
    This unit contains the declarations for the WinSock2
 | 
						|
    Socket Library for Netware and Win32
 | 
						|
 | 
						|
    Copyright (c) 1999-2003 by the Free Pascal development team
 | 
						|
 | 
						|
    See the file COPYING.FPC, included in this distribution,
 | 
						|
    for details about the copyright.
 | 
						|
 | 
						|
    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.
 | 
						|
 | 
						|
 ************************************************************************
 | 
						|
 For NetWare 4.11 you have to install winsock-support (i.e. nw4wsock.exe)
 | 
						|
 NetWare >= 5.0 contains winsock support by default
 | 
						|
 ************************************************************************}
 | 
						|
 | 
						|
{$PACKRECORDS 1}
 | 
						|
{$R-}
 | 
						|
 | 
						|
unit winsock;
 | 
						|
 | 
						|
{$mode objfpc}
 | 
						|
 | 
						|
  interface
 | 
						|
 | 
						|
    const
 | 
						|
       {
 | 
						|
         Default maximium number of sockets.
 | 
						|
         this does not mean that the underlying netware
 | 
						|
         Sockets implementation has to support that many!
 | 
						|
       }
 | 
						|
       FD_SETSIZE = 64;
 | 
						|
 | 
						|
    type
 | 
						|
       tOS_INT  = LongInt;
 | 
						|
       tOS_UINT = DWord;
 | 
						|
       ptOS_INT = ^tOS_INT;
 | 
						|
       ptOS_UINT = ^tOS_UINT;
 | 
						|
 | 
						|
       u_char = char;
 | 
						|
       u_short = word;
 | 
						|
       u_int = tOS_UINT;
 | 
						|
       u_long = dword;
 | 
						|
       pu_long = ^u_long;
 | 
						|
       pu_short = ^u_short;
 | 
						|
       plongint = ^longint;
 | 
						|
       TSocket = longint;
 | 
						|
       BOOL    = boolean;
 | 
						|
       LPINT   = ^integer;
 | 
						|
       LPDWORD = ^dword;
 | 
						|
       {$ifdef netware}
 | 
						|
       OVERLAPPED = record
 | 
						|
          Internal    : DWORD;
 | 
						|
          InternalHigh: DWORD;
 | 
						|
          Offset      : DWORD;
 | 
						|
          OffsetHigh  : DWORD;
 | 
						|
          hEvent      : THandle;
 | 
						|
       end;
 | 
						|
       LPOVERLAPPED = ^OVERLAPPED;
 | 
						|
       TOVERLAPPED  = OVERLAPPED;
 | 
						|
       POVERLAPPED  = ^OVERLAPPED;
 | 
						|
       {$endif}
 | 
						|
       PHandle = ^THandle;
 | 
						|
       TWSAOVERLAPPED= OVERLAPPED;
 | 
						|
       PWSAOVERLAPPED= ^OVERLAPPED;
 | 
						|
       TWSAEVENT = THandle;
 | 
						|
       PWSAEVENT = ^THandle;
 | 
						|
 | 
						|
       { there is already a procedure called FD_SET, so this
 | 
						|
         record was renamed (FK) }
 | 
						|
       fdset = record
 | 
						|
          fd_count : u_int;
 | 
						|
          fd_array : array[0..(FD_SETSIZE)-1] of TSocket;
 | 
						|
       end;
 | 
						|
 | 
						|
       TFDSet = fdset;
 | 
						|
       PFDSet = ^fdset;
 | 
						|
 | 
						|
       timeval = record
 | 
						|
          tv_sec : longint;
 | 
						|
          tv_usec : longint;
 | 
						|
       end;
 | 
						|
 | 
						|
       TTimeVal = timeval;
 | 
						|
       PTimeVal = ^TTimeVal;
 | 
						|
 | 
						|
    const
 | 
						|
       IOCPARM_MASK = $7f;
 | 
						|
       IOC_VOID = $20000000;
 | 
						|
       IOC_OUT = $40000000;
 | 
						|
       IOC_IN = $80000000;
 | 
						|
       IOC_INOUT = IOC_IN or IOC_OUT;
 | 
						|
       FIONREAD = IOC_OUT or
 | 
						|
         ((4 and IOCPARM_MASK) shl 16) or
 | 
						|
         (102 shl 8) or 127;
 | 
						|
       FIONBIO = IOC_IN or
 | 
						|
         ((4 and IOCPARM_MASK) shl 16) or
 | 
						|
         (102 shl 8) or 126;
 | 
						|
       FIOASYNC     = IOC_IN or
 | 
						|
         ((4 and IOCPARM_MASK) shl 16) or
 | 
						|
         (102 shl 8) or 125;
 | 
						|
       {
 | 
						|
         Structures returned by network data base library, taken from the
 | 
						|
         BSD file netdb.h.  All addresses are supplied in host order, and
 | 
						|
         returned in network order (suitable for use in system calls).
 | 
						|
         Slight modifications for differences between Linux and winsock.h
 | 
						|
      }
 | 
						|
    type
 | 
						|
       hostent = record
 | 
						|
          { official name of host  }
 | 
						|
          h_name: pchar;
 | 
						|
          { alias list  }
 | 
						|
          h_aliases: ^pchar;
 | 
						|
          { host address type  }
 | 
						|
          h_addrtype: SmallInt;
 | 
						|
          { length of address  }
 | 
						|
          h_length: SmallInt;
 | 
						|
          { list of addresses  }
 | 
						|
          case byte of
 | 
						|
             0: (h_addr_list: ^pchar);
 | 
						|
             1: (h_addr: ^pchar)
 | 
						|
       end;
 | 
						|
       THostEnt = hostent;
 | 
						|
       PHostEnt = ^THostEnt;
 | 
						|
 | 
						|
       {
 | 
						|
         Assumption here is that a network number
 | 
						|
         fits in an unsigned long -- someday that won't be true!
 | 
						|
       }
 | 
						|
       netent = record
 | 
						|
          n_name : ^char;        // official name of net
 | 
						|
          n_aliases : ^pchar;    // alias list
 | 
						|
          n_addrtype : SmallInt; // net address type
 | 
						|
          n_pad1 : SmallInt;     // ensure right packaging
 | 
						|
          n_net : u_long;        // network #
 | 
						|
       end;
 | 
						|
       TNetEnt = netent;
 | 
						|
       PNetEnt = ^TNetEnt;
 | 
						|
 | 
						|
       servent = record
 | 
						|
          { official service name  }
 | 
						|
          s_name : ^char;
 | 
						|
          { alias list  }
 | 
						|
          s_aliases : ^pchar;
 | 
						|
          { port #  }
 | 
						|
          s_port : SmallInt;
 | 
						|
          n_pad1 : SmallInt;    { ensure right packaging }
 | 
						|
          { protocol to use  }
 | 
						|
          s_proto : ^char;
 | 
						|
       end;
 | 
						|
       TServEnt = servent;
 | 
						|
       PServEnt = ^TServEnt;
 | 
						|
 | 
						|
       protoent = record
 | 
						|
          { official protocol name  }
 | 
						|
          p_name : ^char;
 | 
						|
          { alias list  }
 | 
						|
          p_aliases : ^pchar;
 | 
						|
          { protocol #  }
 | 
						|
          p_proto : SmallInt;
 | 
						|
          p_pad1 : SmallInt;    { ensure packaging }
 | 
						|
       end;
 | 
						|
       TProtoEnt = protoent;
 | 
						|
       PProtoEnt = ^TProtoEnt;
 | 
						|
 | 
						|
    const
 | 
						|
       {
 | 
						|
         Standard well-known IP protocols.
 | 
						|
         For some reason there are differences between Linx and winsock.h
 | 
						|
       }
 | 
						|
       IPPROTO_IP = 0;
 | 
						|
       IPPROTO_ICMP = 1;
 | 
						|
       IPPROTO_IGMP = 2;
 | 
						|
       IPPROTO_GGP = 3;
 | 
						|
       IPPROTO_TCP = 6;
 | 
						|
       IPPORT_ECHO = 7;
 | 
						|
       IPPORT_DISCARD = 9;
 | 
						|
       IPPORT_SYSTAT = 11;
 | 
						|
       IPPROTO_PUP = 12;
 | 
						|
       IPPORT_DAYTIME = 13;
 | 
						|
       IPPORT_NETSTAT = 15;
 | 
						|
       IPPROTO_UDP = 17;
 | 
						|
       IPPROTO_IDP = 22;
 | 
						|
       IPPROTO_ND = 77;
 | 
						|
       IPPROTO_RAW = 255;
 | 
						|
       IPPROTO_MAX = 256;
 | 
						|
       IPPORT_FTP = 21;
 | 
						|
       IPPORT_TELNET = 23;
 | 
						|
       IPPORT_SMTP = 25;
 | 
						|
       IPPORT_TIMESERVER = 37;
 | 
						|
       IPPORT_NAMESERVER = 42;
 | 
						|
       IPPORT_WHOIS = 43;
 | 
						|
       IPPORT_MTP = 57;
 | 
						|
       IPPORT_TFTP = 69;
 | 
						|
       IPPORT_RJE = 77;
 | 
						|
       IPPORT_FINGER = 79;
 | 
						|
       IPPORT_TTYLINK = 87;
 | 
						|
       IPPORT_SUPDUP = 95;
 | 
						|
       IPPORT_EXECSERVER = 512;
 | 
						|
       IPPORT_LOGINSERVER = 513;
 | 
						|
       IPPORT_CMDSERVER = 514;
 | 
						|
       IPPORT_EFSSERVER = 520;
 | 
						|
       IPPORT_BIFFUDP = 512;
 | 
						|
       IPPORT_WHOSERVER = 513;
 | 
						|
       IPPORT_ROUTESERVER = 520;
 | 
						|
       IPPORT_RESERVED = 1024;
 | 
						|
 | 
						|
    const
 | 
						|
       IMPLINK_IP = 155;
 | 
						|
       IMPLINK_LOWEXPER = 156;
 | 
						|
       IMPLINK_HIGHEXPER = 158;
 | 
						|
 | 
						|
    type
 | 
						|
       SunB = packed record
 | 
						|
          s_b1,s_b2,s_b3,s_b4 : u_char;
 | 
						|
       end;
 | 
						|
 | 
						|
       SunW = packed record
 | 
						|
         s_w1,s_w2 : u_short;
 | 
						|
       end;
 | 
						|
 | 
						|
       in_addr = record
 | 
						|
          case integer of
 | 
						|
             0 : (S_un_b : SunB);
 | 
						|
             1 : (S_un_w : SunW);
 | 
						|
             2 : (S_addr : u_long);
 | 
						|
       end;
 | 
						|
       TInAddr = in_addr;
 | 
						|
       PInAddr = ^TInAddr;
 | 
						|
 | 
						|
       sockaddr_in = record
 | 
						|
          case integer of
 | 
						|
             0 : ( (* equals to sockaddr_in, size is 16 byte *)
 | 
						|
                  sin_family : SmallInt;                      (* 2 byte *)
 | 
						|
                  sin_port : u_short;                         (* 2 byte *)
 | 
						|
                  sin_addr : TInAddr;                         (* 4 byte *)
 | 
						|
                  sin_zero : array[0..7] of char;             (* 8 byte *)
 | 
						|
                 );
 | 
						|
             1 : ( (* equals to sockaddr, size is 16 byte *)
 | 
						|
                  sa_family : SmallInt;                       (* 2 byte *)
 | 
						|
                  sa_data : array[0..13] of char;             (* 14 byte *)
 | 
						|
                 );
 | 
						|
 | 
						|
         end;
 | 
						|
 | 
						|
       TSockAddrIn = sockaddr_in;
 | 
						|
       PSockAddrIn = ^TSockAddrIn;
 | 
						|
       TSockAddr = sockaddr_in;
 | 
						|
       PSockAddr = ^TSockAddr;
 | 
						|
 | 
						|
    const
 | 
						|
       INADDR_ANY = $00000000;
 | 
						|
       INADDR_LOOPBACK = $7F000001;
 | 
						|
       INADDR_BROADCAST = $FFFFFFFF;
 | 
						|
 | 
						|
       IN_CLASSA_NET = $ff000000;
 | 
						|
       IN_CLASSA_NSHIFT = 24;
 | 
						|
       IN_CLASSA_HOST = $00ffffff;
 | 
						|
       IN_CLASSA_MAX = 128;
 | 
						|
       IN_CLASSB_NET = $ffff0000;
 | 
						|
       IN_CLASSB_NSHIFT = 16;
 | 
						|
       IN_CLASSB_HOST = $0000ffff;
 | 
						|
       IN_CLASSB_MAX = 65536;
 | 
						|
       IN_CLASSC_NET = $ffffff00;
 | 
						|
       IN_CLASSC_NSHIFT = 8;
 | 
						|
       IN_CLASSC_HOST = $000000ff;
 | 
						|
       INADDR_NONE = $ffffffff;
 | 
						|
 | 
						|
       WSADESCRIPTION_LEN = 256;
 | 
						|
       WSASYS_STATUS_LEN = 128;
 | 
						|
 | 
						|
    type
 | 
						|
       WSADATA = record
 | 
						|
          wVersion : WORD;              { 2 byte, ofs 0 }
 | 
						|
          wHighVersion : WORD;          { 2 byte, ofs 2 }
 | 
						|
          szDescription : array[0..(WSADESCRIPTION_LEN+1)-1] of char; { 257 byte, ofs 4 }
 | 
						|
          szSystemStatus : array[0..(WSASYS_STATUS_LEN+1)-1] of char; { 129 byte, ofs 261 }
 | 
						|
          iMaxSockets : word;           { 2 byte, ofs 390 }
 | 
						|
          iMaxUdpDg : word;             { 2 byte, ofs 392 }
 | 
						|
          pad1 : SmallInt;              { 2 byte, ofs 394 } { ensure right packaging }
 | 
						|
          lpVendorInfo : pchar;         { 4 byte, ofs 396 }
 | 
						|
       end;                             { total size 400 }
 | 
						|
       TWSAData = WSADATA;
 | 
						|
       PWSAData = TWSAData;
 | 
						|
 | 
						|
    const
 | 
						|
       IP_OPTIONS = 1;
 | 
						|
       IP_MULTICAST_IF = 2;
 | 
						|
       IP_MULTICAST_TTL = 3;
 | 
						|
       IP_MULTICAST_LOOP = 4;
 | 
						|
       IP_ADD_MEMBERSHIP = 5;
 | 
						|
       IP_DROP_MEMBERSHIP = 6;
 | 
						|
       IP_DEFAULT_MULTICAST_TTL = 1;
 | 
						|
       IP_DEFAULT_MULTICAST_LOOP = 1;
 | 
						|
       IP_MAX_MEMBERSHIPS = 20;
 | 
						|
 | 
						|
    type
 | 
						|
       ip_mreq = record
 | 
						|
            imr_multiaddr : in_addr;
 | 
						|
            imr_interface : in_addr;
 | 
						|
         end;
 | 
						|
 | 
						|
    {
 | 
						|
       Definitions related to sockets: types, address families, options,
 | 
						|
       taken from the BSD file sys/socket.h.
 | 
						|
    }
 | 
						|
    const
 | 
						|
       INVALID_SOCKET = longint(not(1));
 | 
						|
       SOCKET_ERROR = -1;
 | 
						|
       SOCK_STREAM = 1;
 | 
						|
       SOCK_DGRAM = 2;
 | 
						|
       SOCK_RAW = 3;
 | 
						|
       SOCK_RDM = 4;
 | 
						|
       SOCK_SEQPACKET = 5;
 | 
						|
 | 
						|
      { For setsockoptions(2)  }
 | 
						|
       SO_DEBUG = $0001;
 | 
						|
       SO_ACCEPTCONN = $0002;
 | 
						|
       SO_REUSEADDR = $0004;
 | 
						|
       SO_KEEPALIVE = $0008;
 | 
						|
       SO_DONTROUTE = $0010;
 | 
						|
       SO_BROADCAST = $0020;
 | 
						|
       SO_USELOOPBACK = $0040;
 | 
						|
       SO_LINGER = $0080;
 | 
						|
       SO_OOBINLINE = $0100;
 | 
						|
       {
 | 
						|
         Additional options.
 | 
						|
       }
 | 
						|
       { send buffer size  }
 | 
						|
       SO_SNDBUF = $1001;
 | 
						|
       { receive buffer size  }
 | 
						|
       SO_RCVBUF = $1002;
 | 
						|
       { send low-water mark  }
 | 
						|
       SO_SNDLOWAT = $1003;
 | 
						|
       { receive low-water mark  }
 | 
						|
       SO_RCVLOWAT = $1004;
 | 
						|
       { send timeout  }
 | 
						|
       SO_SNDTIMEO = $1005;
 | 
						|
       { receive timeout  }
 | 
						|
       SO_RCVTIMEO = $1006;
 | 
						|
       { get error status and clear  }
 | 
						|
       SO_ERROR = $1007;
 | 
						|
       { get socket type  }
 | 
						|
       SO_TYPE = $1008;
 | 
						|
 | 
						|
       { WinSock 2 extension -- new option }
 | 
						|
       SO_GROUP_ID       = $2001;      { ID of a socket group }
 | 
						|
       SO_GROUP_PRIORITY = $2002;      { the relative priority within a group }
 | 
						|
       SO_MAX_MSG_SIZE   = $2003;      { maximum message size }
 | 
						|
       SO_PROTOCOL_INFOA = $2004;      { WSAPROTOCOL_INFOA structure }
 | 
						|
       SO_PROTOCOL_INFOW = $2005;      { WSAPROTOCOL_INFOW structure }
 | 
						|
       SO_PROTOCOL_INFO  = SO_PROTOCOL_INFOW;
 | 
						|
       PVD_CONFIG        = $3001;      { configuration info for service provider }
 | 
						|
 | 
						|
 | 
						|
       {
 | 
						|
         Options for connect and disconnect data and options.  Used only by
 | 
						|
         non-TCP/IP transports such as DECNet, OSI TP4, etc.
 | 
						|
       }
 | 
						|
       SO_CONNDATA = $7000;
 | 
						|
       SO_CONNOPT = $7001;
 | 
						|
       SO_DISCDATA = $7002;
 | 
						|
       SO_DISCOPT = $7003;
 | 
						|
       SO_CONNDATALEN = $7004;
 | 
						|
       SO_CONNOPTLEN = $7005;
 | 
						|
       SO_DISCDATALEN = $7006;
 | 
						|
       SO_DISCOPTLEN = $7007;
 | 
						|
 | 
						|
       {
 | 
						|
         Option for opening sockets for synchronous access.
 | 
						|
       }
 | 
						|
       SO_OPENTYPE = $7008;
 | 
						|
       SO_SYNCHRONOUS_ALERT = $10;
 | 
						|
       SO_SYNCHRONOUS_NONALERT = $20;
 | 
						|
 | 
						|
       {
 | 
						|
         Other NT-specific options.
 | 
						|
       }
 | 
						|
       SO_MAXDG = $7009;
 | 
						|
       SO_MAXPATHDG = $700A;
 | 
						|
       SO_UPDATE_ACCEPT_CONTEXT = $700B;
 | 
						|
       SO_CONNECT_TIME = $700C;
 | 
						|
 | 
						|
       {
 | 
						|
         TCP options.
 | 
						|
       }
 | 
						|
       TCP_NODELAY = $0001;
 | 
						|
       TCP_BSDURGENT = $7000;
 | 
						|
 | 
						|
       { Address families. }
 | 
						|
       { unspecified  }
 | 
						|
       AF_UNSPEC = 0;
 | 
						|
       {
 | 
						|
        * Although  AF_UNSPEC  is  defined for backwards compatibility, using
 | 
						|
        * AF_UNSPEC for the "af" parameter when creating a socket is STRONGLY
 | 
						|
        * DISCOURAGED.    The  interpretation  of  the  "protocol"  parameter
 | 
						|
        * depends  on the actual address family chosen.  As environments grow
 | 
						|
        * to  include  more  and  more  address families that use overlapping
 | 
						|
        * protocol  values  there  is  more  and  more  chance of choosing an
 | 
						|
        * undesired address family when AF_UNSPEC is used. }
 | 
						|
 | 
						|
       { local to host (pipes, portals)  }
 | 
						|
       AF_UNIX = 1;
 | 
						|
       { internetwork: UDP, TCP, etc.  }
 | 
						|
       AF_INET = 2;
 | 
						|
       { arpanet imp addresses  }
 | 
						|
       AF_IMPLINK = 3;
 | 
						|
       { pup protocols: e.g. BSP  }
 | 
						|
       AF_PUP = 4;
 | 
						|
       { mit CHAOS protocols  }
 | 
						|
       AF_CHAOS = 5;
 | 
						|
       { IPX and SPX  }
 | 
						|
       AF_IPX = 6;
 | 
						|
       { XEROX NS protocols  }
 | 
						|
       AF_NS = 6;
 | 
						|
       { ISO protocols  }
 | 
						|
       AF_ISO = 7;
 | 
						|
       { OSI is ISO  }
 | 
						|
       AF_OSI = AF_ISO;
 | 
						|
       { european computer manufacturers  }
 | 
						|
       AF_ECMA = 8;
 | 
						|
       { datakit protocols  }
 | 
						|
       AF_DATAKIT = 9;
 | 
						|
       { CCITT protocols, X.25 etc  }
 | 
						|
       AF_CCITT = 10;
 | 
						|
       { IBM SNA  }
 | 
						|
       AF_SNA = 11;
 | 
						|
       { DECnet  }
 | 
						|
       AF_DECnet = 12;
 | 
						|
       { Direct data link interface  }
 | 
						|
       AF_DLI = 13;
 | 
						|
       { LAT  }
 | 
						|
       AF_LAT = 14;
 | 
						|
       { NSC Hyperchannel  }
 | 
						|
       AF_HYLINK = 15;
 | 
						|
       { AppleTalk  }
 | 
						|
       AF_APPLETALK = 16;
 | 
						|
       { NetBios-style addresses  }
 | 
						|
       AF_NETBIOS = 17;
 | 
						|
       { VoiceView }
 | 
						|
       AF_VOICEVIEW = 18;
 | 
						|
       { FireFox }
 | 
						|
       AF_FIREFOX = 19;
 | 
						|
       { Somebody is using this! }
 | 
						|
       AF_UNKNOWN1 = 20;
 | 
						|
       { Banyan }
 | 
						|
       AF_BAN = 21;
 | 
						|
 | 
						|
       AF_ATM      = 22;
 | 
						|
       AF_INET6    = 23;
 | 
						|
       AF_CLUSTER  = 24;
 | 
						|
       AF_12844    = 25;
 | 
						|
       AF_IRDA     = 26;
 | 
						|
 | 
						|
       AF_MAX      = 27;
 | 
						|
 | 
						|
    type
 | 
						|
       {
 | 
						|
         Structure used by kernel to pass protocol
 | 
						|
         information in raw sockets.
 | 
						|
       }
 | 
						|
       sockproto = record
 | 
						|
          sp_family : u_short;
 | 
						|
          sp_protocol : u_short;
 | 
						|
       end;
 | 
						|
       TSockProto = sockproto;
 | 
						|
       PSockProto = ^TSockProto;
 | 
						|
 | 
						|
    const
 | 
						|
       {
 | 
						|
         Protocol families, same as address families for now.
 | 
						|
       }
 | 
						|
       PF_UNSPEC = AF_UNSPEC;
 | 
						|
       PF_UNIX = AF_UNIX;
 | 
						|
       PF_INET = AF_INET;
 | 
						|
       PF_IMPLINK = AF_IMPLINK;
 | 
						|
       PF_PUP = AF_PUP;
 | 
						|
       PF_CHAOS = AF_CHAOS;
 | 
						|
       PF_NS = AF_NS;
 | 
						|
       PF_IPX = AF_IPX;
 | 
						|
       PF_ISO = AF_ISO;
 | 
						|
       PF_OSI = AF_OSI;
 | 
						|
       PF_ECMA = AF_ECMA;
 | 
						|
       PF_DATAKIT = AF_DATAKIT;
 | 
						|
       PF_CCITT = AF_CCITT;
 | 
						|
       PF_SNA = AF_SNA;
 | 
						|
       PF_DECnet = AF_DECnet;
 | 
						|
       PF_DLI = AF_DLI;
 | 
						|
       PF_LAT = AF_LAT;
 | 
						|
       PF_HYLINK = AF_HYLINK;
 | 
						|
       PF_APPLETALK = AF_APPLETALK;
 | 
						|
       PF_VOICEVIEW = AF_VOICEVIEW;
 | 
						|
       PF_FIREFOX = AF_FIREFOX;
 | 
						|
       PF_UNKNOWN1 = AF_UNKNOWN1;
 | 
						|
       PF_BAN = AF_BAN;
 | 
						|
       PF_ATM = AF_ATM;
 | 
						|
       PF_INET6 = AF_INET6;
 | 
						|
       PF_MAX = AF_MAX;
 | 
						|
 | 
						|
    type
 | 
						|
       {
 | 
						|
         Structure used for manipulating linger option.
 | 
						|
       }
 | 
						|
       linger = record
 | 
						|
          l_onoff : u_short;
 | 
						|
          l_linger : u_short;
 | 
						|
       end;
 | 
						|
       TLinger = linger;
 | 
						|
       PLinger = ^TLinger;
 | 
						|
 | 
						|
    const
 | 
						|
       {
 | 
						|
         Level number for (get/set)sockopt() to apply to socket itself.
 | 
						|
       }
 | 
						|
       { options for socket level  }
 | 
						|
       SOL_SOCKET = $ffff;
 | 
						|
       {
 | 
						|
         Maximum queue length specifiable by listen.
 | 
						|
       }
 | 
						|
       SOMAXCONN = $7fffffff;
 | 
						|
       { process out-of-band data  }
 | 
						|
       MSG_OOB = $1;
 | 
						|
       { peek at incoming message  }
 | 
						|
       MSG_PEEK = $2;
 | 
						|
       { send without using routing tables  }
 | 
						|
       MSG_DONTROUTE = $4;
 | 
						|
       MSG_MAXIOVLEN = 16;
 | 
						|
       { partial send or recv for message xport  }
 | 
						|
       MSG_PARTIAL = $8000;
 | 
						|
 | 
						|
       {
 | 
						|
         Define constant based on rfc883, used by gethostbyxxxx() calls.
 | 
						|
       }
 | 
						|
       MAXGETHOSTSTRUCT = 1024;
 | 
						|
       MAXHOSTNAMELEN = MAXGETHOSTSTRUCT;
 | 
						|
 | 
						|
       { Winsock2 extension -- new flags for WSASend, WSASendTo, WSARecv
 | 
						|
         and WSARecvFrom }
 | 
						|
       MSG_INTERRUPT   = $10;  { send/recv in the interrupt context }
 | 
						|
 | 
						|
       { Define flags to be used with the WSAAsyncSelect() call. }
 | 
						|
       FD_READ = $01;
 | 
						|
       FD_WRITE = $02;
 | 
						|
       FD_OOB = $04;
 | 
						|
       FD_ACCEPT = $08;
 | 
						|
       FD_CONNECT = $10;
 | 
						|
       FD_CLOSE = $20;
 | 
						|
       FD_QOS   = $40;
 | 
						|
       FD_GROUP_QOS = $80;
 | 
						|
       FD_ROUTING_INTERFACE_CHANGE = $100;
 | 
						|
       FD_ADDRESS_LIST_CHANGE = $200;
 | 
						|
       FD_MAX_EVENTS = 10;
 | 
						|
       FD_ALL_EVENTS = $4ff;
 | 
						|
 | 
						|
       { All Windows Sockets error constants are biased by WSABASEERR from
 | 
						|
         the "normal" }
 | 
						|
       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;
 | 
						|
       WSANOTINITIALISED = 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.
 | 
						|
        }
 | 
						|
       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;
 | 
						|
 | 
						|
       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 }
 | 
						|
 | 
						|
    const
 | 
						|
       {
 | 
						|
         Windows Sockets errors redefined as regular Berkeley error constants.
 | 
						|
       }
 | 
						|
       EWOULDBLOCK = WSAEWOULDBLOCK;
 | 
						|
       EINPROGRESS = WSAEINPROGRESS;
 | 
						|
       EALREADY = WSAEALREADY;
 | 
						|
       ENOTSOCK = WSAENOTSOCK;
 | 
						|
       EDESTADDRREQ = WSAEDESTADDRREQ;
 | 
						|
       EMSGSIZE = WSAEMSGSIZE;
 | 
						|
       EPROTOTYPE = WSAEPROTOTYPE;
 | 
						|
       ENOPROTOOPT = WSAENOPROTOOPT;
 | 
						|
       EPROTONOSUPPORT = WSAEPROTONOSUPPORT;
 | 
						|
       ESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT;
 | 
						|
       EOPNOTSUPP = WSAEOPNOTSUPP;
 | 
						|
       EPFNOSUPPORT = WSAEPFNOSUPPORT;
 | 
						|
       EAFNOSUPPORT = WSAEAFNOSUPPORT;
 | 
						|
       EADDRINUSE = WSAEADDRINUSE;
 | 
						|
       EADDRNOTAVAIL = WSAEADDRNOTAVAIL;
 | 
						|
       ENETDOWN = WSAENETDOWN;
 | 
						|
       ENETUNREACH = WSAENETUNREACH;
 | 
						|
       ENETRESET = WSAENETRESET;
 | 
						|
       ECONNABORTED = WSAECONNABORTED;
 | 
						|
       ECONNRESET = WSAECONNRESET;
 | 
						|
       ENOBUFS = WSAENOBUFS;
 | 
						|
       EISCONN = WSAEISCONN;
 | 
						|
       ENOTCONN = WSAENOTCONN;
 | 
						|
       ESHUTDOWN = WSAESHUTDOWN;
 | 
						|
       ETOOMANYREFS = WSAETOOMANYREFS;
 | 
						|
       ETIMEDOUT = WSAETIMEDOUT;
 | 
						|
       ECONNREFUSED = WSAECONNREFUSED;
 | 
						|
       ELOOP = WSAELOOP;
 | 
						|
       ENAMETOOLONG = WSAENAMETOOLONG;
 | 
						|
       EHOSTDOWN = WSAEHOSTDOWN;
 | 
						|
       EHOSTUNREACH = WSAEHOSTUNREACH;
 | 
						|
       ENOTEMPTY = WSAENOTEMPTY;
 | 
						|
       EPROCLIM = WSAEPROCLIM;
 | 
						|
       EUSERS = WSAEUSERS;
 | 
						|
       EDQUOT = WSAEDQUOT;
 | 
						|
       ESTALE = WSAESTALE;
 | 
						|
       EREMOTE = WSAEREMOTE;
 | 
						|
 | 
						|
       TF_DISCONNECT = $01;
 | 
						|
       TF_REUSE_SOCKET = $02;
 | 
						|
       TF_WRITE_BEHIND = $04;
 | 
						|
 | 
						|
       {
 | 
						|
         Options for use with [gs]etsockopt at the IP level.
 | 
						|
       }
 | 
						|
       IP_TTL = 7;
 | 
						|
       IP_TOS = 8;
 | 
						|
       IP_DONTFRAGMENT = 9;
 | 
						|
 | 
						|
    type
 | 
						|
       _TRANSMIT_FILE_BUFFERS = record
 | 
						|
          Head : Pointer;
 | 
						|
          HeadLength : dword;
 | 
						|
          Tail : Pointer;
 | 
						|
          TailLength : dword;
 | 
						|
       end;
 | 
						|
       TRANSMIT_FILE_BUFFERS = _TRANSMIT_FILE_BUFFERS;
 | 
						|
       TTransmitFileBuffers = _TRANSMIT_FILE_BUFFERS;
 | 
						|
       PTransmitFileBuffers = ^TTransmitFileBuffers;
 | 
						|
 | 
						|
    {  WinSock 2 extension -- WSABUF and QOS struct, include qos.h
 | 
						|
       to pull in FLOWSPEC and related definitions  }
 | 
						|
    { the length of the buffer  }
 | 
						|
    (* far ignored *)
 | 
						|
    { the pointer to the buffer  }
 | 
						|
    (* far ignored *)
 | 
						|
 | 
						|
    TWSABUF = record
 | 
						|
            len : u_long;
 | 
						|
            buf : ^char;
 | 
						|
         end;
 | 
						|
    _WSABUF = TWSABUF;
 | 
						|
    LPWSABUF = ^TWSABUF;
 | 
						|
    PWSABUF  = ^TWSABUF;
 | 
						|
 | 
						|
    {$i qos.inc }
 | 
						|
 | 
						|
    { the flow spec for data sending  }
 | 
						|
    { the flow spec for data receiving  }
 | 
						|
    { additional provider specific stuff  }
 | 
						|
 | 
						|
    type
 | 
						|
 | 
						|
       TQualityOfService = record
 | 
						|
            SendingFlowspec   : TFLOWSPEC;
 | 
						|
            ReceivingFlowspec : TFLOWSPEC;
 | 
						|
            ProviderSpecific  : TWSABUF;
 | 
						|
         end;
 | 
						|
       TQOS = TQualityOfService;
 | 
						|
       PQOS = ^TQOS;
 | 
						|
 | 
						|
    { WinSock 2 extension -- manifest constants for return values of the condition function }
 | 
						|
 | 
						|
    const
 | 
						|
       CF_ACCEPT  = $0000;
 | 
						|
       CF_REJECT  = $0001;
 | 
						|
       CF_DEFER   = $0002;
 | 
						|
 | 
						|
       { WinSock 2 extension -- manifest constants for shutdown() }
 | 
						|
       SD_RECEIVE = $00;
 | 
						|
       SD_SEND    = $01;
 | 
						|
       SD_BOTH    = $02;
 | 
						|
 | 
						|
    { WinSock 2 extension -- data type and manifest constants for socket groups }
 | 
						|
 | 
						|
    type
 | 
						|
       TGROUP = dword;
 | 
						|
       PGROUP = ^TGROUP;
 | 
						|
 | 
						|
    const
 | 
						|
       SG_UNCONSTRAINED_GROUP = $01;
 | 
						|
       SG_CONSTRAINED_GROUP   = $02;
 | 
						|
 | 
						|
    { WinSock 2 extension -- data type for WSAEnumNetworkEvents() }
 | 
						|
 | 
						|
    type
 | 
						|
 | 
						|
       TWSANETWORKEVENTS = record
 | 
						|
         lNetworkEvents : longint;
 | 
						|
         iErrorCode     : array[0..(FD_MAX_EVENTS)-1] of longint;
 | 
						|
       end;
 | 
						|
       LPWSANETWORKEVENTS = ^TWSANETWORKEVENTS;
 | 
						|
       PWSANETWORKEVENTS  = ^TWSANETWORKEVENTS;
 | 
						|
 | 
						|
    {  WinSock 2 extension -- WSAPROTOCOL_INFO structure and associated
 | 
						|
       manifest constants  }
 | 
						|
 | 
						|
    type
 | 
						|
 | 
						|
       TGUID = record
 | 
						|
            Data1 : dword;
 | 
						|
            Data2 : word;
 | 
						|
            Data3 : word;
 | 
						|
            Data4 : array[0..7] of byte;
 | 
						|
         end;
 | 
						|
       PGUID  = ^TGUID;
 | 
						|
       LPGUID = PGUID;
 | 
						|
 | 
						|
    const
 | 
						|
       MAX_PROTOCOL_CHAIN = 7;
 | 
						|
       BASE_PROTOCOL = 1;
 | 
						|
       LAYERED_PROTOCOL = 0;
 | 
						|
    { the length of the chain,      }
 | 
						|
    { length = 0 means layered protocol,  }
 | 
						|
    { length = 1 means base protocol,  }
 | 
						|
    { length > 1 means protocol chain  }
 | 
						|
    { a list of dwCatalogEntryIds  }
 | 
						|
 | 
						|
    type
 | 
						|
 | 
						|
       TWSAPROTOCOLCHAIN = record
 | 
						|
            ChainLen : longint;
 | 
						|
            ChainEntries : array[0..(MAX_PROTOCOL_CHAIN)-1] of DWORD;
 | 
						|
         end;
 | 
						|
       LPWSAPROTOCOLCHAIN = ^TWSAPROTOCOLCHAIN;
 | 
						|
       PWSAPROTOCOLCHAIN  = ^TWSAPROTOCOLCHAIN;
 | 
						|
 | 
						|
    const
 | 
						|
       WSAPROTOCOL_LEN = 255;
 | 
						|
    (* far ignored *)
 | 
						|
 | 
						|
    type
 | 
						|
 | 
						|
       TWSAPROTOCOL_INFOA = record
 | 
						|
            dwServiceFlags1 : DWORD;
 | 
						|
            dwServiceFlags2 : DWORD;
 | 
						|
            dwServiceFlags3 : DWORD;
 | 
						|
            dwServiceFlags4 : DWORD;
 | 
						|
            dwProviderFlags : DWORD;
 | 
						|
            ProviderId      : TGUID;
 | 
						|
            dwCatalogEntryId: DWORD;
 | 
						|
            ProtocolChain   : TWSAPROTOCOLCHAIN;
 | 
						|
            iVersion        : longint;
 | 
						|
            iAddressFamily  : longint;
 | 
						|
            iMaxSockAddr    : longint;
 | 
						|
            iMinSockAddr    : longint;
 | 
						|
            iSocketType     : longint;
 | 
						|
            iProtocol          : longint;
 | 
						|
            iProtocolMaxOffset : longint;
 | 
						|
            iNetworkByteOrder  : longint;
 | 
						|
            iSecurityScheme    : longint;
 | 
						|
            dwMessageSize      : DWORD;
 | 
						|
            dwProviderReserved : DWORD;
 | 
						|
            szProtocol         : array[0..(WSAPROTOCOL_LEN + 1)-1] of CHAR;
 | 
						|
         end;
 | 
						|
       LPWSAPROTOCOL_INFOA = ^TWSAPROTOCOL_INFOA;
 | 
						|
       PWSAPROTOCOL_INFOA  = ^TWSAPROTOCOL_INFOA;
 | 
						|
 | 
						|
 | 
						|
       TWSAPROTOCOL_INFOW = record
 | 
						|
            dwServiceFlags1 : DWORD;
 | 
						|
            dwServiceFlags2 : DWORD;
 | 
						|
            dwServiceFlags3 : DWORD;
 | 
						|
            dwServiceFlags4 : DWORD;
 | 
						|
            dwProviderFlags : DWORD;
 | 
						|
            ProviderId      : TGUID;
 | 
						|
            dwCatalogEntryId: DWORD;
 | 
						|
            ProtocolChain   : TWSAPROTOCOLCHAIN;
 | 
						|
            iVersion        : longint;
 | 
						|
            iAddressFamily  : longint;
 | 
						|
            iMaxSockAddr    : longint;
 | 
						|
            iMinSockAddr    : longint;
 | 
						|
            iSocketType     : longint;
 | 
						|
            iProtocol       : longint;
 | 
						|
            iProtocolMaxOffset : longint;
 | 
						|
            iNetworkByteOrder  : longint;
 | 
						|
            iSecurityScheme    : longint;
 | 
						|
            dwMessageSize      : DWORD;
 | 
						|
            dwProviderReserved : DWORD;
 | 
						|
            szProtocol : array[0..(WSAPROTOCOL_LEN + 1)-1] of WCHAR;
 | 
						|
         end;
 | 
						|
       LPWSAPROTOCOL_INFOW = ^TWSAPROTOCOL_INFOW;
 | 
						|
       PWSAPROTOCOL_INFOW  = ^TWSAPROTOCOL_INFOW;
 | 
						|
 | 
						|
{$ifdef UNICODE}
 | 
						|
    type
 | 
						|
       TWSAPROTOCOL_INFO = TWSAPROTOCOL_INFOW;
 | 
						|
       LPWSAPROTOCOL_INFO = LPWSAPROTOCOL_INFOW;
 | 
						|
       PWSAPROTOCOL_INFO  = PWSAPROTOCOL_INFOW;
 | 
						|
{$else}
 | 
						|
    type
 | 
						|
       TWSAPROTOCOL_INFO = TWSAPROTOCOL_INFOA;
 | 
						|
       LPWSAPROTOCOL_INFO = LPWSAPROTOCOL_INFOA;
 | 
						|
       PWSAPROTOCOL_INFO  = PWSAPROTOCOL_INFOA;
 | 
						|
{$endif}
 | 
						|
 | 
						|
    { Flag bit definitions for dwProviderFlags  }
 | 
						|
 | 
						|
    const
 | 
						|
       PFL_MULTIPLE_PROTO_ENTRIES = $00000001;
 | 
						|
       PFL_RECOMMENDED_PROTO_ENTRY = $00000002;
 | 
						|
       PFL_HIDDEN = $00000004;
 | 
						|
       PFL_MATCHES_PROTOCOL_ZERO = $00000008;
 | 
						|
    { Flag bit definitions for dwServiceFlags1  }
 | 
						|
       XP1_CONNECTIONLESS = $00000001;
 | 
						|
       XP1_GUARANTEED_DELIVERY = $00000002;
 | 
						|
       XP1_GUARANTEED_ORDER = $00000004;
 | 
						|
       XP1_MESSAGE_ORIENTED = $00000008;
 | 
						|
       XP1_PSEUDO_STREAM = $00000010;
 | 
						|
       XP1_GRACEFUL_CLOSE = $00000020;
 | 
						|
       XP1_EXPEDITED_DATA = $00000040;
 | 
						|
       XP1_CONNECT_DATA = $00000080;
 | 
						|
       XP1_DISCONNECT_DATA = $00000100;
 | 
						|
       XP1_SUPPORT_BROADCAST = $00000200;
 | 
						|
       XP1_SUPPORT_MULTIPOINT = $00000400;
 | 
						|
       XP1_MULTIPOINT_CONTROL_PLANE = $00000800;
 | 
						|
       XP1_MULTIPOINT_DATA_PLANE = $00001000;
 | 
						|
       XP1_QOS_SUPPORTED = $00002000;
 | 
						|
       XP1_INTERRUPT = $00004000;
 | 
						|
       XP1_UNI_SEND = $00008000;
 | 
						|
       XP1_UNI_RECV = $00010000;
 | 
						|
       XP1_IFS_HANDLES = $00020000;
 | 
						|
       XP1_PARTIAL_MESSAGE = $00040000;
 | 
						|
       BIGENDIAN = $0000;
 | 
						|
       LITTLEENDIAN = $0001;
 | 
						|
       SECURITY_PROTOCOL_NONE = $0000;
 | 
						|
 | 
						|
    { WinSock 2 extension -- manifest constants for WSAJoinLeaf() }
 | 
						|
       JL_SENDER_ONLY = $01;
 | 
						|
       JL_RECEIVER_ONLY = $02;
 | 
						|
       JL_BOTH = $04;
 | 
						|
 | 
						|
    { WinSock 2 extension -- manifest constants for WSASocket() }
 | 
						|
       WSA_FLAG_OVERLAPPED = $01;
 | 
						|
       WSA_FLAG_MULTIPOINT_C_ROOT = $02;
 | 
						|
       WSA_FLAG_MULTIPOINT_C_LEAF = $04;
 | 
						|
       WSA_FLAG_MULTIPOINT_D_ROOT = $08;
 | 
						|
       WSA_FLAG_MULTIPOINT_D_LEAF = $10;
 | 
						|
 | 
						|
 | 
						|
    { WinSock 2 extension -- manifest constants for WSAIoctl()  }
 | 
						|
       IOC_UNIX = $00000000;
 | 
						|
       IOC_WS2 = $08000000;
 | 
						|
       IOC_PROTOCOL = $10000000;
 | 
						|
       IOC_VENDOR = $18000000;
 | 
						|
 | 
						|
    { WinSock 2 extension -- manifest constants for SIO_TRANSLATE_HANDLE ioctl }
 | 
						|
 | 
						|
    const
 | 
						|
       TH_NETDEV = $00000001;
 | 
						|
       TH_TAPI   = $00000002;
 | 
						|
 | 
						|
    {  Microsoft Windows Extended data types required for the functions to
 | 
						|
       convert   back  and  forth  between  binary  and  string  forms  of
 | 
						|
       addresses.  }
 | 
						|
 | 
						|
    type
 | 
						|
       //PSOCKADDR = sockaddr;
 | 
						|
       LPSOCKADDR = PSockAddr;
 | 
						|
 | 
						|
    {  Manifest constants and type definitions related to name resolution and
 | 
						|
       registration (RNR) API  }
 | 
						|
    type
 | 
						|
       TBLOB = record
 | 
						|
         cbSize : u_long;
 | 
						|
         pBlobData:ARRAY[0..0] OF POINTER;  {???}
 | 
						|
       end;
 | 
						|
       PBLOB = ^TBLOB;
 | 
						|
 | 
						|
    { Service Install Flags }
 | 
						|
 | 
						|
    const
 | 
						|
       SERVICE_MULTIPLE = $00000001;
 | 
						|
 | 
						|
    { & Name Spaces  }
 | 
						|
       NS_ALL = 0;
 | 
						|
       NS_SAP = 1;
 | 
						|
       NS_NDS = 2;
 | 
						|
       NS_PEER_BROWSE = 3;
 | 
						|
       NS_TCPIP_LOCAL = 10;
 | 
						|
       NS_TCPIP_HOSTS = 11;
 | 
						|
       NS_DNS = 12;
 | 
						|
       NS_NETBT = 13;
 | 
						|
       NS_WINS = 14;
 | 
						|
       NS_NBP = 20;
 | 
						|
       NS_MS = 30;
 | 
						|
       NS_STDA = 31;
 | 
						|
       NS_NTDS = 32;
 | 
						|
       NS_X500 = 40;
 | 
						|
       NS_NIS = 41;
 | 
						|
       NS_NISPLUS = 42;
 | 
						|
       NS_WRQ = 50;
 | 
						|
 | 
						|
    {  Resolution flags for WSAGetAddressByName().
 | 
						|
       Note these are also used by the 1.1 API GetAddressByName, so
 | 
						|
       leave them around. }
 | 
						|
 | 
						|
       RES_UNUSED_1 = $00000001;
 | 
						|
       RES_FLUSH_CACHE = $00000002;
 | 
						|
 | 
						|
       RES_SERVICE = $00000004;
 | 
						|
 | 
						|
    { RES_SERVICE  }
 | 
						|
    { Well known value names for Service Types }
 | 
						|
 | 
						|
    const
 | 
						|
       SERVICE_TYPE_VALUE_IPXPORTA = 'IpxSocket';
 | 
						|
(* error #define SERVICE_TYPE_VALUE_IPXPORTW     L"IpxSocket" *)
 | 
						|
       SERVICE_TYPE_VALUE_SAPIDA = 'SapId';
 | 
						|
(* error #define SERVICE_TYPE_VALUE_SAPIDW       L"SapId" *)
 | 
						|
       SERVICE_TYPE_VALUE_TCPPORTA = 'TcpPort';
 | 
						|
(* error #define SERVICE_TYPE_VALUE_TCPPORTW     L"TcpPort" *)
 | 
						|
       SERVICE_TYPE_VALUE_UDPPORTA = 'UdpPort';
 | 
						|
(* error #define SERVICE_TYPE_VALUE_UDPPORTW     L"UdpPort" *)
 | 
						|
       SERVICE_TYPE_VALUE_OBJECTIDA = 'ObjectId';
 | 
						|
(* error #define SERVICE_TYPE_VALUE_OBJECTIDW    L"ObjectId" *)
 | 
						|
 | 
						|
{$ifdef UNICODE}
 | 
						|
    const
 | 
						|
       SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDW;
 | 
						|
       SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTW;
 | 
						|
       SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTW;
 | 
						|
       SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDW;
 | 
						|
{$else}
 | 
						|
    { not UNICODE  }
 | 
						|
    const
 | 
						|
       SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDA;
 | 
						|
       SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTA;
 | 
						|
       SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTA;
 | 
						|
       SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDA;
 | 
						|
{$endif}
 | 
						|
 | 
						|
    { SockAddr Information }
 | 
						|
    type
 | 
						|
 | 
						|
       TSOCKET_ADDRESS = record
 | 
						|
            lpSockaddr      : PSockAddr;
 | 
						|
            iSockaddrLength : tOS_INT;
 | 
						|
         end;
 | 
						|
       PSOCKET_ADDRESS = ^TSOCKET_ADDRESS;
 | 
						|
       LPSOCKET_ADDRESS = ^TSOCKET_ADDRESS;
 | 
						|
 | 
						|
    { CSAddr Information }
 | 
						|
 | 
						|
       TCSADDR_INFO = record
 | 
						|
            LocalAddr   : TSOCKET_ADDRESS;
 | 
						|
            RemoteAddr  : TSOCKET_ADDRESS;
 | 
						|
            iSocketType : tOS_INT;
 | 
						|
            iProtocol   : tOS_INT;
 | 
						|
         end;
 | 
						|
       PCSADDR_INFO  = ^TCSADDR_INFO;
 | 
						|
       LPCSADDR_INFO = ^TCSADDR_INFO;
 | 
						|
 | 
						|
    { Address list returned via SIO_ADDRESS_LIST_QUERY }
 | 
						|
 | 
						|
    type
 | 
						|
 | 
						|
       TSOCKET_ADDRESS_LIST = record
 | 
						|
            iAddressCount : tOS_INT;
 | 
						|
            Address       : array[0..0] of TSOCKET_ADDRESS;
 | 
						|
         end;
 | 
						|
       LPSOCKET_ADDRESS_LIST = ^TSOCKET_ADDRESS_LIST;
 | 
						|
       PSOCKET_ADDRESS_LIST = ^TSOCKET_ADDRESS_LIST;
 | 
						|
 | 
						|
    { Address Family/Protocol Tuples }
 | 
						|
 | 
						|
       TAFPROTOCOLS = record
 | 
						|
            iAddressFamily : tOS_INT;
 | 
						|
            iProtocol      : tOS_INT;
 | 
						|
         end;
 | 
						|
       PAFPROTOCOLS = ^TAFPROTOCOLS;
 | 
						|
       LPAFPROTOCOLS = ^TAFPROTOCOLS;
 | 
						|
 | 
						|
    { Client Query API Typedefs }
 | 
						|
    { The comparators }
 | 
						|
 | 
						|
       TWSAEcomparator = (COMP_EQUAL := 0,COMP_NOTLESS);
 | 
						|
       PWSAECOMPARATOR = ^TWSAEcomparator;
 | 
						|
       LPWSAECOMPARATOR = ^TWSAEcomparator;
 | 
						|
 | 
						|
       TWSAVersion = record
 | 
						|
            dwVersion : DWORD;
 | 
						|
            ecHow     : TWSAECOMPARATOR;
 | 
						|
         end;
 | 
						|
       PWSAVERSION = ^TWSAVersion;
 | 
						|
       LPWSAVERSION = ^TWSAVersion;
 | 
						|
 | 
						|
       TWSAQuerySetA = record
 | 
						|
            dwSize : DWORD;
 | 
						|
            lpszServiceInstanceName : PChar;
 | 
						|
            lpServiceClassId : LPGUID;
 | 
						|
            lpVersion : LPWSAVERSION;
 | 
						|
            lpszComment : PChar;
 | 
						|
            dwNameSpace : DWORD;
 | 
						|
            lpNSProviderId : LPGUID;
 | 
						|
            lpszContext : PChar;
 | 
						|
            dwNumberOfProtocols : DWORD;
 | 
						|
            lpafpProtocols : LPAFPROTOCOLS;
 | 
						|
            lpszQueryString : PChar;
 | 
						|
            dwNumberOfCsAddrs : DWORD;
 | 
						|
            lpcsaBuffer : LPCSADDR_INFO;
 | 
						|
            dwOutputFlags : DWORD;
 | 
						|
            lpBlob : PBLOB;
 | 
						|
         end;
 | 
						|
       PWSAQUERYSETA = ^TWSAQuerySetA;
 | 
						|
       LPWSAQUERYSETA = ^TWSAQuerySetA;
 | 
						|
 | 
						|
       TWSAQuerySetW = record
 | 
						|
            dwSize : DWORD;
 | 
						|
            lpszServiceInstanceName : PWideChar;
 | 
						|
            lpServiceClassId : LPGUID;
 | 
						|
            lpVersion : LPWSAVERSION;
 | 
						|
            lpszComment : PWideChar;
 | 
						|
            dwNameSpace : DWORD;
 | 
						|
            lpNSProviderId : LPGUID;
 | 
						|
            lpszContext : PWideChar;
 | 
						|
            dwNumberOfProtocols : DWORD;
 | 
						|
            lpafpProtocols : LPAFPROTOCOLS;
 | 
						|
            lpszQueryString : PWideChar;
 | 
						|
            dwNumberOfCsAddrs : DWORD;
 | 
						|
            lpcsaBuffer : LPCSADDR_INFO;
 | 
						|
            dwOutputFlags : DWORD;
 | 
						|
            lpBlob : PBLOB;
 | 
						|
         end;
 | 
						|
       PWSAQUERYSETW = ^TWSAQuerySetW;
 | 
						|
       LPWSAQUERYSETW = ^TWSAQuerySetW;
 | 
						|
{$ifdef UNICODE}
 | 
						|
 | 
						|
    type
 | 
						|
       TWSAQUERYSET = TWSAQUERYSETW;
 | 
						|
       PWSAQUERYSET = PWSAQUERYSETW;
 | 
						|
       LPWSAQUERYSET = LPWSAQUERYSETW;
 | 
						|
{$else}
 | 
						|
    type
 | 
						|
       TWSAQUERYSET = TWSAQUERYSETA;
 | 
						|
       PWSAQUERYSET = PWSAQUERYSETA;
 | 
						|
       LPWSAQUERYSET = LPWSAQUERYSETA;
 | 
						|
{$endif}
 | 
						|
 | 
						|
    const
 | 
						|
       LUP_DEEP = $0001;
 | 
						|
       LUP_CONTAINERS = $0002;
 | 
						|
       LUP_NOCONTAINERS = $0004;
 | 
						|
       LUP_NEAREST = $0008;
 | 
						|
       LUP_RETURN_NAME = $0010;
 | 
						|
       LUP_RETURN_TYPE = $0020;
 | 
						|
       LUP_RETURN_VERSION = $0040;
 | 
						|
       LUP_RETURN_COMMENT = $0080;
 | 
						|
       LUP_RETURN_ADDR = $0100;
 | 
						|
       LUP_RETURN_BLOB = $0200;
 | 
						|
       LUP_RETURN_ALIASES = $0400;
 | 
						|
       LUP_RETURN_QUERY_STRING = $0800;
 | 
						|
       LUP_RETURN_ALL = $0FF0;
 | 
						|
       LUP_RES_SERVICE = $8000;
 | 
						|
       LUP_FLUSHCACHE = $1000;
 | 
						|
       LUP_FLUSHPREVIOUS = $2000;
 | 
						|
 | 
						|
    { Return flags }
 | 
						|
 | 
						|
       RESULT_IS_ALIAS = $0001;
 | 
						|
 | 
						|
    { Service Address Registration and Deregistration Data Types. }
 | 
						|
 | 
						|
    type
 | 
						|
 | 
						|
       TWSAESETSERVICEOP =
 | 
						|
          (RNRSERVICE_REGISTER := 0,RNRSERVICE_DEREGISTER, RNRSERVICE_DELETE);
 | 
						|
       PWSAESETSERVICEOP = ^TWSAESETSERVICEOP;
 | 
						|
       LPWSAESETSERVICEOP = ^TWSAESETSERVICEOP;
 | 
						|
 | 
						|
    { Service Installation/Removal Data Types. }
 | 
						|
 | 
						|
       TWSANSClassInfoA = record
 | 
						|
            lpszName    : PChar;
 | 
						|
            dwNameSpace : DWORD;
 | 
						|
            dwValueType : DWORD;
 | 
						|
            dwValueSize : DWORD;
 | 
						|
            lpValue     : Pointer;
 | 
						|
         end;
 | 
						|
       PWSANSCLASSINFOA = ^TWSANSClassInfoA;
 | 
						|
       LPWSANSCLASSINFOA = ^TWSANSClassInfoA;
 | 
						|
 | 
						|
       TWSANSClassInfoW = record
 | 
						|
            lpszName    : PWideChar;
 | 
						|
            dwNameSpace : DWORD;
 | 
						|
            dwValueType : DWORD;
 | 
						|
            dwValueSize : DWORD;
 | 
						|
            lpValue     : Pointer;
 | 
						|
         end;
 | 
						|
       PWSANSCLASSINFOW = ^TWSANSClassInfoW;
 | 
						|
       LPWSANSCLASSINFOW = ^TWSANSClassInfoW;
 | 
						|
{$ifdef UNICODE}
 | 
						|
    type
 | 
						|
       TWSANSCLASSINFO = TWSANSCLASSINFOW;
 | 
						|
       PWSANSCLASSINFO = PWSANSCLASSINFOW;
 | 
						|
       LPWSANSCLASSINFO = LPWSANSCLASSINFOW;
 | 
						|
{$else}
 | 
						|
    type
 | 
						|
       TWSANSCLASSINFO = TWSANSCLASSINFOA;
 | 
						|
       PWSANSCLASSINFO = PWSANSCLASSINFOA;
 | 
						|
       LPWSANSCLASSINFO = LPWSANSCLASSINFOA;
 | 
						|
{$endif}
 | 
						|
 | 
						|
    type
 | 
						|
       TWSAServiceClassInfoA = record
 | 
						|
            lpServiceClassId     : LPGUID;
 | 
						|
            lpszServiceClassName : PChar;
 | 
						|
            dwCount              : DWORD;
 | 
						|
            lpClassInfos         : LPWSANSCLASSINFOA;
 | 
						|
         end;
 | 
						|
       PWSASERVICECLASSINFOA = ^TWSAServiceClassInfoA;
 | 
						|
       LPWSASERVICECLASSINFOA = ^TWSAServiceClassInfoA;
 | 
						|
 | 
						|
       TWSAServiceClassInfoW = record
 | 
						|
            lpServiceClassId : LPGUID;
 | 
						|
            lpszServiceClassName : PWideChar;
 | 
						|
            dwCount : DWORD;
 | 
						|
            lpClassInfos : LPWSANSCLASSINFOW;
 | 
						|
         end;
 | 
						|
       PWSASERVICECLASSINFOW = ^TWSAServiceClassInfoW;
 | 
						|
       LPWSASERVICECLASSINFOW = ^TWSAServiceClassInfoW;
 | 
						|
 | 
						|
{$ifdef UNICODE}
 | 
						|
    type
 | 
						|
       TWSASERVICECLASSINFO = TWSASERVICECLASSINFOW;
 | 
						|
       PWSASERVICECLASSINFO = PWSASERVICECLASSINFOW;
 | 
						|
       LPWSASERVICECLASSINFO = LPWSASERVICECLASSINFOW;
 | 
						|
{$else}
 | 
						|
    type
 | 
						|
       TWSASERVICECLASSINFO = TWSASERVICECLASSINFOA;
 | 
						|
       PWSASERVICECLASSINFO = PWSASERVICECLASSINFOA;
 | 
						|
       LPWSASERVICECLASSINFO = LPWSASERVICECLASSINFOA;
 | 
						|
{$endif}
 | 
						|
 | 
						|
    type
 | 
						|
       TWSANAMESPACE_INFOA = record
 | 
						|
            NSProviderId  : TGUID;
 | 
						|
            dwNameSpace   : DWORD;
 | 
						|
            fActive       : BOOL;
 | 
						|
            dwVersion     : DWORD;
 | 
						|
            lpszIdentifier: PChar;
 | 
						|
         end;
 | 
						|
       PWSANAMESPACE_INFOA = ^TWSANAMESPACE_INFOA;
 | 
						|
       LPWSANAMESPACE_INFOA = ^TWSANAMESPACE_INFOA;
 | 
						|
 | 
						|
       TWSANAMESPACE_INFOW = record
 | 
						|
            NSProviderId  : TGUID;
 | 
						|
            dwNameSpace   : DWORD;
 | 
						|
            fActive       : BOOL;
 | 
						|
            dwVersion     : DWORD;
 | 
						|
            lpszIdentifier: PWideChar;
 | 
						|
         end;
 | 
						|
       PWSANAMESPACE_INFOW = ^TWSANAMESPACE_INFOW;
 | 
						|
       LPWSANAMESPACE_INFOW = ^TWSANAMESPACE_INFOW;
 | 
						|
{$ifdef UNICODE}
 | 
						|
    type
 | 
						|
       TWSANAMESPACE_INFO = TWSANAMESPACE_INFOW;
 | 
						|
       PWSANAMESPACE_INFO = PWSANAMESPACE_INFOW;
 | 
						|
       LPWSANAMESPACE_INFO = LPWSANAMESPACE_INFOW;
 | 
						|
{$else}
 | 
						|
    type
 | 
						|
       TWSANAMESPACE_INFO = TWSANAMESPACE_INFOA;
 | 
						|
       PWSANAMESPACE_INFO = PWSANAMESPACE_INFOA;
 | 
						|
       LPWSANAMESPACE_INFO = LPWSANAMESPACE_INFOA;
 | 
						|
{$endif}
 | 
						|
 | 
						|
    { WinSock 2 extensions -- data types for the condition function in
 | 
						|
      WSAAccept() and overlapped I/O completion routine. }
 | 
						|
 | 
						|
    type
 | 
						|
      TWSAOVERLAPPED_COMPLETION_ROUTINE =
 | 
						|
        function  (dwError,cbTransferred : longint;
 | 
						|
                   lpOverlapped          : PWSAOVERLAPPED;
 | 
						|
                   dwFlags               : longint) : longint;
 | 
						|
            {$ifdef netware} cdecl; {$else} stdcall; {$endif}
 | 
						|
 | 
						|
      TCONDITIONPROC =
 | 
						|
        function (lpCallerId, lpCallerData : PWSABUF;
 | 
						|
                  lpSQOS, lpGQOS           : PQOS;
 | 
						|
                  lpCalleeId, lpCalleeData : PWSABUF;
 | 
						|
                  g                        : PGROUP;
 | 
						|
                  dwCallbackData           : dword) : longint;
 | 
						|
            {$ifdef netware} cdecl; {$else} stdcall; {$endif}
 | 
						|
 | 
						|
{--------------------------------------------------------------------}
 | 
						|
{netware extensions from ws2nlm.h}
 | 
						|
{$ifdef netware}
 | 
						|
  { New Address Types }
 | 
						|
 | 
						|
  const
 | 
						|
     AF_INET_ACP = 25;
 | 
						|
     AF_IPX_ACP = 26;
 | 
						|
     AF_ACP = 27;
 | 
						|
 | 
						|
  { NetWare SSL Ioctls }
 | 
						|
 | 
						|
  const
 | 
						|
     SECURITY_PROTOCOL_SSL = 1;
 | 
						|
     SECURITY_PROTOCOL_TLS = 2;
 | 
						|
 | 
						|
  { There are three interesting authentication types }
 | 
						|
  { CLIENT -    Client initiates a SSL connection.  }
 | 
						|
  { SERVER - Listener set up to listen for incoming SSL conns, (Server sends it's cert during auth) }
 | 
						|
  { MUTUAL is SSL Server requesting client authentication, (Server asks for client cert inaddition to sending it's cert) }
 | 
						|
  { optval is a DWORD defined as }
 | 
						|
 | 
						|
  const
 | 
						|
     MUTUAL = $00000002;
 | 
						|
 | 
						|
  { System flags not defined in NetWare }
 | 
						|
 | 
						|
  const
 | 
						|
     INFINITE = $FFFFFFFF;
 | 
						|
     WAIT_OBJECT_0 = 0;
 | 
						|
 | 
						|
  {Various Types that may not be defined }
 | 
						|
  { }
 | 
						|
  { }
 | 
						|
  { Predefined Value Types. }
 | 
						|
  { }
 | 
						|
  { No value type }
 | 
						|
 | 
						|
  const
 | 
						|
     REG_NONE = 0;
 | 
						|
     REG_SZ = 1;
 | 
						|
     REG_EXPAND_SZ = 2;
 | 
						|
     REG_BINARY = 3;
 | 
						|
     REG_DWORD = 4;
 | 
						|
     REG_DWORD_LITTLE_ENDIAN = 4;
 | 
						|
     REG_DWORD_BIG_ENDIAN = 5;
 | 
						|
     REG_LINK = 6;
 | 
						|
     REG_MULTI_SZ = 7;
 | 
						|
     REG_RESOURCE_LIST = 8;
 | 
						|
     REG_FULL_RESOURCE_DESCRIPTOR = 9;
 | 
						|
     REG_RESOURCE_REQUIREMENTS_LIST = 10;
 | 
						|
 | 
						|
     ERROR_INVALID_HANDLE = 6;
 | 
						|
     ERROR_NOT_ENOUGH_MEMORY = 8;
 | 
						|
     ERROR_INVALID_PARAMETER = 87;
 | 
						|
     ERROR_IO_PENDING = 997;
 | 
						|
     ERROR_OPERATION_ABORTED = 995;
 | 
						|
     ERROR_IO_INCOMPLETE = 996;
 | 
						|
 | 
						|
  { connect timeout  }
 | 
						|
 | 
						|
  const
 | 
						|
     SO_CONNTIMEO = $1009;
 | 
						|
  { NetWare Fast Accept and Recv option structures }
 | 
						|
  { Fast Recv also has a cleanup routine returned. }
 | 
						|
 | 
						|
  type
 | 
						|
 | 
						|
     LPFASTACCEPT_COMPLETION_ROUTINE = longint;
 | 
						|
     LPFASTRECV_COMPLETION_ROUTINE = longint;
 | 
						|
 | 
						|
     TFASTACCEPT_OP = record
 | 
						|
          acceptHandler : LPFASTACCEPT_COMPLETION_ROUTINE;
 | 
						|
          arg : pointer;
 | 
						|
       end;
 | 
						|
     LPFAST_ACCEPT_OPT = ^TFASTACCEPT_OP;
 | 
						|
     PFAST_ACCEPT_OPT = ^TFASTACCEPT_OP;
 | 
						|
 | 
						|
     TFASTRECV_OP = record
 | 
						|
          recvHandler : LPFASTRECV_COMPLETION_ROUTINE;
 | 
						|
          Arg : pointer;
 | 
						|
       end;
 | 
						|
     LPFAST_RECV_OPT = ^TFASTRECV_OP;
 | 
						|
     PFAST_RECV_OPT = ^TFASTRECV_OP;
 | 
						|
 | 
						|
  { Winsock 2 applications that want to use SSL need to define WS_SSL }
 | 
						|
  type
 | 
						|
     time_t = dword;
 | 
						|
 | 
						|
  { Secure Sockets Layer - needed until Winsock SDK supplies ssl header file. }
 | 
						|
  { Taken from Winsock 2 protocol Annex for SSL Security Protocol. Unsupported }
 | 
						|
  { options are labeled "not supported". }
 | 
						|
  { This value is the SSL protocol tag and WSAIoctl dwIoControlCode
 | 
						|
     "T" value.  }
 | 
						|
 | 
						|
  const
 | 
						|
     _SO_SSL = (2 shl 27) or ($73 shl 16);
 | 
						|
  {
 | 
						|
     These values are used to form the WSAIoctl dwIoControlCode
 | 
						|
     "Code" value.
 | 
						|
   }
 | 
						|
     _SO_SSL_FLAGS = $01;
 | 
						|
     _SO_SSL_CIPHERS = $02;
 | 
						|
     _SO_SSL_SERVER = $04;
 | 
						|
  { not supported }
 | 
						|
     _SO_SSL_AUTH_CERT_HOOK = $08;
 | 
						|
  { not supported }
 | 
						|
     _SO_SSL_RSA_ENCRYPT_HOOK = $10;
 | 
						|
  { not supported }
 | 
						|
     _SO_SSL_RSA_DECRYPT_HOOK = $20;
 | 
						|
  { _SO_SSL_CLIENT has been changed from 0x03 to 0x80 to avoid bitwise  }
 | 
						|
  { conflicts with _SO_SSL_CIPHERS _SO_SSL_FLAGS.  }
 | 
						|
     _SO_SSL_CLIENT = $80;
 | 
						|
  { Actual SSL Ioctl commands }
 | 
						|
     SO_SSL_GET_FLAGS = (IOC_IN or _SO_SSL) or _SO_SSL_FLAGS;
 | 
						|
     SO_SSL_SET_FLAGS = (IOC_OUT or _SO_SSL) or _SO_SSL_FLAGS;
 | 
						|
     SO_SSL_GET_CIPHERS = (IOC_IN or _SO_SSL) or _SO_SSL_CIPHERS;
 | 
						|
  {not supported }
 | 
						|
     SO_SSL_SET_CIPHERS = (IOC_OUT or _SO_SSL) or _SO_SSL_CIPHERS;
 | 
						|
     SO_SSL_GET_CLIENT = (IOC_IN or _SO_SSL) or _SO_SSL_CLIENT;
 | 
						|
     SO_SSL_SET_CLIENT = (IOC_OUT or _SO_SSL) or _SO_SSL_CLIENT;
 | 
						|
     SO_SSL_GET_SERVER = (IOC_IN or _SO_SSL) or _SO_SSL_SERVER;
 | 
						|
     SO_SSL_SET_SERVER = (IOC_OUT or _SO_SSL) or _SO_SSL_SERVER;
 | 
						|
  {not supported }
 | 
						|
     SO_SSL_GET_AUTH_CERT_HOOK = (IOC_IN or _SO_SSL) or _SO_SSL_AUTH_CERT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_SSL_SET_AUTH_CERT_HOOK = (IOC_OUT or _SO_SSL) or _SO_SSL_AUTH_CERT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_SSL_GET_RSA_ENCRYPT_HOOK = (IOC_IN or _SO_SSL) or _SO_SSL_RSA_ENCRYPT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_SSL_SET_RSA_ENCRYPT_HOOK = (IOC_OUT or _SO_SSL) or _SO_SSL_RSA_ENCRYPT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_SSL_GET_RSA_DECRYPT_HOOK = (IOC_IN or _SO_SSL) or _SO_SSL_RSA_DECRYPT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_SSL_SET_RSA_DECRYPT_HOOK = (IOC_OUT or _SO_SSL) or _SO_SSL_RSA_DECRYPT_HOOK;
 | 
						|
     SO_SSL_ENABLE = $001;
 | 
						|
     SO_SSL_SERVER = $002;
 | 
						|
     SO_SSL_AUTH_CLIENT = $004;
 | 
						|
  {not supported }
 | 
						|
     SO_SSL_ACCEPT_WEAK = $008;
 | 
						|
 | 
						|
  type
 | 
						|
 | 
						|
     Tsslcipheropts = record
 | 
						|
          n : longint;
 | 
						|
          specs : array[0..2] of char;
 | 
						|
       end;
 | 
						|
 | 
						|
     Tsslclientopts = record
 | 
						|
          cert : PChar;
 | 
						|
          certlen : longint;
 | 
						|
          sidtimeout : time_t;
 | 
						|
          sidentries : longint;
 | 
						|
          siddir : PChar;
 | 
						|
       end;
 | 
						|
 | 
						|
     Tsslserveropts = record
 | 
						|
          cert : PChar;
 | 
						|
          certlen : longint;
 | 
						|
          sidtimeout : time_t;
 | 
						|
          sidentries : longint;
 | 
						|
          siddir : PChar;
 | 
						|
       end;
 | 
						|
 | 
						|
  {not suppported }
 | 
						|
     {Tsslauthcertopts = record
 | 
						|
          _type : longint;
 | 
						|
          func : function (arg:pointer; cert:Pchar; len:longint):longint;cdecl;
 | 
						|
          arg : pointer;
 | 
						|
       end;}
 | 
						|
 | 
						|
  {not supported  }
 | 
						|
 | 
						|
  const
 | 
						|
     SSL_ACK_OK = 1;
 | 
						|
  {not supported  }
 | 
						|
     SSL_ACH_WEAK_OK = 2;
 | 
						|
  {not supported  }
 | 
						|
     SSL_ACH_LONG_DATA = 3;
 | 
						|
  {not supported  }
 | 
						|
     SSL_ACH_BAD_DATA = 4;
 | 
						|
  {not supported  }
 | 
						|
     SSL_ACH_BAD_SIG = 5;
 | 
						|
  {not supported  }
 | 
						|
     SSL_ACH_CERT_EXPIRED = 6;
 | 
						|
  {not suppported }
 | 
						|
 | 
						|
  type
 | 
						|
     sslrsaencrypthook = record
 | 
						|
          func : function (arg:pointer; blockType:longint; dest:Pchar; destlen:Plongint; src:Pchar;
 | 
						|
                       srclen:longint):longint; cdecl;
 | 
						|
          arg : pointer;
 | 
						|
       end;
 | 
						|
 | 
						|
  {not supported  }
 | 
						|
 | 
						|
  const
 | 
						|
     SSL_REH_OK = 0;
 | 
						|
  {not supported  }
 | 
						|
     SSL_REH_BAD_TYPE = 1;
 | 
						|
  {not supported  }
 | 
						|
     SSL_REH_BAD_LEN = 2;
 | 
						|
  {not suppported }
 | 
						|
 | 
						|
  type
 | 
						|
     Tsslrsadecrypthook = record
 | 
						|
          func : function (arg:pointer; blockType:longint; dest:Pchar; destlen:Plongint; src:Pchar;
 | 
						|
                       srclen:longint):longint; cdecl;
 | 
						|
          arg : pointer;
 | 
						|
       end;
 | 
						|
     Psslrsadecrypthook = ^Tsslrsadecrypthook;
 | 
						|
 | 
						|
  {not supported  }
 | 
						|
 | 
						|
  const
 | 
						|
     SSL_RDH_OK = 0;
 | 
						|
  {not supported  }
 | 
						|
     SSL_RDH_BAD_TYPE = 1;
 | 
						|
  {not supported  }
 | 
						|
     SSL_RDH_BAD_LEN = 2;
 | 
						|
  { TLS options }
 | 
						|
  { Secure Sockets Layer - needed until Winsock SDK supplies ssl header file. }
 | 
						|
  { Taken from Winsock 2 protocol Annex for SSL Security Protocol. Unsupported }
 | 
						|
  { options are labeled "not supported". }
 | 
						|
  {
 | 
						|
     This value is the SSL protocol tag and WSAIoctl dwIoControlCode
 | 
						|
     "T" value. This value is unique to distinguish a TLS Ioctl from an SSL
 | 
						|
     Ioctl due to different structure definitions.
 | 
						|
   }
 | 
						|
     _SO_TLS = (2 shl 27) or ($74 shl 16);
 | 
						|
  {
 | 
						|
     These values are used to form the WSAIoctl dwIoControlCode
 | 
						|
     "Code" value.
 | 
						|
   }
 | 
						|
     _SO_TLS_FLAGS = $01;
 | 
						|
     _SO_TLS_CIPHERS = $02;
 | 
						|
     _SO_TLS_SERVER = $04;
 | 
						|
  { not supported }
 | 
						|
     _SO_TLS_AUTH_CERT_HOOK = $08;
 | 
						|
  { not supported }
 | 
						|
     _SO_TLS_RSA_ENCRYPT_HOOK = $10;
 | 
						|
  { not supported }
 | 
						|
     _SO_TLS_RSA_DECRYPT_HOOK = $20;
 | 
						|
     _SO_TLS_CERT = $40;
 | 
						|
  { _SO_TLS_CLIENT has been changed from 0x03 to 0x80 to avoid bitwise  }
 | 
						|
  { conflicts with _SO_TLS_CIPHERS _SO_TLS_FLAGS.  }
 | 
						|
     _SO_TLS_CLIENT = $80;
 | 
						|
  {
 | 
						|
     Actual TLS Ioctl commands
 | 
						|
   }
 | 
						|
     SO_TLS_GET_FLAGS = (IOC_IN or _SO_TLS) or _SO_TLS_FLAGS;
 | 
						|
     SO_TLS_SET_FLAGS = (IOC_OUT or _SO_TLS) or _SO_TLS_FLAGS;
 | 
						|
     SO_TLS_GET_CIPHERS = (IOC_IN or _SO_TLS) or _SO_TLS_CIPHERS;
 | 
						|
  {not supported }
 | 
						|
     SO_TLS_SET_CIPHERS = (IOC_OUT or _SO_TLS) or _SO_TLS_CIPHERS;
 | 
						|
     SO_TLS_GET_CLIENT = (IOC_IN or _SO_TLS) or _SO_TLS_CLIENT;
 | 
						|
     SO_TLS_SET_CLIENT = (IOC_OUT or _SO_TLS) or _SO_TLS_CLIENT;
 | 
						|
     SO_TLS_GET_SERVER = (IOC_IN or _SO_TLS) or _SO_TLS_SERVER;
 | 
						|
     SO_TLS_SET_SERVER = (IOC_OUT or _SO_TLS) or _SO_TLS_SERVER;
 | 
						|
     SO_TLS_GET_CERT = (IOC_IN or _SO_TLS) or _SO_TLS_CERT;
 | 
						|
  {not supported }
 | 
						|
     SO_TLS_GET_AUTH_CERT_HOOK = (IOC_IN or _SO_TLS) or _SO_TLS_AUTH_CERT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_TLS_SET_AUTH_CERT_HOOK = (IOC_OUT or _SO_TLS) or _SO_TLS_AUTH_CERT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_TLS_GET_RSA_ENCRYPT_HOOK = (IOC_IN or _SO_TLS) or _SO_TLS_RSA_ENCRYPT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_TLS_SET_RSA_ENCRYPT_HOOK = (IOC_OUT or _SO_TLS) or _SO_TLS_RSA_ENCRYPT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_TLS_GET_RSA_DECRYPT_HOOK = (IOC_IN or _SO_TLS) or _SO_TLS_RSA_DECRYPT_HOOK;
 | 
						|
  {not supported }
 | 
						|
     SO_TLS_SET_RSA_DECRYPT_HOOK = (IOC_OUT or _SO_TLS) or _SO_TLS_RSA_DECRYPT_HOOK;
 | 
						|
     SO_TLS_ENABLE = $0001;
 | 
						|
     SO_TLS_SERVER = $0002;
 | 
						|
     SO_TLS_AUTH_CLIENT = $0004;
 | 
						|
  {not supported }
 | 
						|
     SO_TLS_ACCEPT_WEAK = $0008;
 | 
						|
     SO_TLS_MAP_DISABLE = $0010;
 | 
						|
     SO_TLS_MAP_IDENTITY = $0020;
 | 
						|
     SO_TLS_BLIND_ACCEPT = $0040;
 | 
						|
     SO_TLS_INTERACTIVE_ACCEPT = $0080;
 | 
						|
 | 
						|
  type
 | 
						|
     Ttlscipheropts = record
 | 
						|
          n : longint;
 | 
						|
          specs : array[0..2] of char;
 | 
						|
       end;
 | 
						|
     Ptlscipheropts = ^Ttlscipheropts;
 | 
						|
 | 
						|
     Ttlsclientopts = record
 | 
						|
          wallet : PWideChar;  // ^unicode;
 | 
						|
          walletlen : longint;
 | 
						|
          sidtimeout : time_t;
 | 
						|
          sidentries : longint;
 | 
						|
          siddir : PChar;  // ^char;
 | 
						|
          options : pointer;
 | 
						|
       end;
 | 
						|
     Ptlsclientopts = ^Ttlsclientopts;
 | 
						|
 | 
						|
     Ttlsserveropts = record
 | 
						|
          wallet : PWideChar;  // ^unicode;
 | 
						|
          walletlen : longint;
 | 
						|
          sidtimeout : time_t;
 | 
						|
          sidentries : longint;
 | 
						|
          siddir : PChar;  // ^char;
 | 
						|
          options : pointer;
 | 
						|
       end;
 | 
						|
     Ptlsserveropts = ^Ttlsserveropts;
 | 
						|
 | 
						|
  {wallet content provider e.g. PFX, KMO, DER. }
 | 
						|
  {alias for private key in wallet to be used }
 | 
						|
  {  not used for anything but pfx wallet provider }
 | 
						|
  {number of elements in the array }
 | 
						|
  {array of trusted root names }
 | 
						|
  {number of elements in the array }
 | 
						|
  {reserved to set ciphers }
 | 
						|
  {reserved for CRL }
 | 
						|
  {reserved for CRL len. }
 | 
						|
     Tnwtlsopts = record
 | 
						|
          walletProvider : PWideChar;  //^unicode;
 | 
						|
          keysList : PPWideChar;      // ^^unicode;
 | 
						|
          numElementsInKeyList : longint;
 | 
						|
          TrustedRootList : PPWideChar;  // ^^unicode;
 | 
						|
          numElementsInTRList : longint;
 | 
						|
          reservedforfutureuse : pointer;
 | 
						|
          reservedforfutureCRL : pointer;
 | 
						|
          reservedforfutureCRLLen : longint;
 | 
						|
          reserved1 : pointer;
 | 
						|
          reserved2 : pointer;
 | 
						|
          reserved3 : pointer;
 | 
						|
       end;
 | 
						|
     Pnwtlsopts=^Tnwtlsopts;
 | 
						|
 | 
						|
  {not suppported }
 | 
						|
     {tlsauthcertopts = record
 | 
						|
          _type : longint;
 | 
						|
          func : function (arg:pointer; cert:Pchar; len:longint):longint; cdecl;
 | 
						|
          arg : pointer;
 | 
						|
       end;}
 | 
						|
 | 
						|
  {not supported  }
 | 
						|
 | 
						|
  const
 | 
						|
     TLS_ACK_OK = 1;
 | 
						|
  {not supported  }
 | 
						|
     TLS_ACH_WEAK_OK = 2;
 | 
						|
  {not supported  }
 | 
						|
     TLS_ACH_LONG_DATA = 3;
 | 
						|
  {not supported  }
 | 
						|
     TLS_ACH_BAD_DATA = 4;
 | 
						|
  {not supported  }
 | 
						|
     TLS_ACH_BAD_SIG = 5;
 | 
						|
  {not supported  }
 | 
						|
     TLS_ACH_CERT_EXPIRED = 6;
 | 
						|
  {not suppported }
 | 
						|
 | 
						|
  type
 | 
						|
     Ttlsrsaencrypthook = record
 | 
						|
          func : function (arg:pointer; blockType:longint; dest:Pchar; destlen:Plongint; src:Pchar;
 | 
						|
                       srclen:longint):longint; cdecl;
 | 
						|
          arg : pointer;
 | 
						|
       end;
 | 
						|
     Ptlsrsaencrypthook=^Ttlsrsaencrypthook;
 | 
						|
 | 
						|
  {not supported  }
 | 
						|
 | 
						|
  const
 | 
						|
     TLS_REH_OK = 0;
 | 
						|
  {not supported  }
 | 
						|
     TLS_REH_BAD_TYPE = 1;
 | 
						|
  {not supported  }
 | 
						|
     TLS_REH_BAD_LEN = 2;
 | 
						|
  {not suppported }
 | 
						|
 | 
						|
  type
 | 
						|
     Ttlsrsadecrypthook = record
 | 
						|
          func : function (arg:pointer; blockType:longint; dest:Pchar; destlen:Plongint; src:Pchar;
 | 
						|
                       srclen:longint):longint; cdecl;
 | 
						|
          arg : pointer;
 | 
						|
       end;
 | 
						|
     Ptlsrsadecrypthook=^Ttlsrsadecrypthook;
 | 
						|
  {not supported  }
 | 
						|
 | 
						|
  const
 | 
						|
     TLS_RDH_OK = 0;
 | 
						|
  {not supported  }
 | 
						|
     TLS_RDH_BAD_TYPE = 1;
 | 
						|
  {not supported  }
 | 
						|
     TLS_RDH_BAD_LEN = 2;
 | 
						|
 | 
						|
  type
 | 
						|
     Ttlscert = record
 | 
						|
          cert : PChar;
 | 
						|
          certlen : longint;
 | 
						|
       end;
 | 
						|
     Ptlscert = ^Ttlscert;
 | 
						|
 | 
						|
  const SIO_RAWCALLBACKS       = $1ADD0002;
 | 
						|
        SIO_WORKTODOCALLBACKS  = $1ADD0004;
 | 
						|
        SIO_FASTACCEPTCALLBACK = $1ADD0008;
 | 
						|
        SIO_FASTRECVCALLBACK   = $1ADD000C;
 | 
						|
        SIO_RCVFULLMSG         = $1ADD0010;
 | 
						|
        SIO_SSL_CRYPTFILE      = $1ADD0010;
 | 
						|
        SIO_SSL_AUTHTYPE       = $1ADD0020;
 | 
						|
        SIO_SSL_CONVERT        = $1ADD0040;
 | 
						|
        SKTS_RAWCALLBACKS      = $40000000;
 | 
						|
        SKTS_WORKTODOCALLBACKS = $20000000;
 | 
						|
        WAIT_ABANDONED         = $00000080;
 | 
						|
        WAIT_TIMEOUT           = $00000102;
 | 
						|
        WAIT_FAILED            = $FFFFFFFF;
 | 
						|
        MAXIMUM_WAIT_OBJECTS   = 64;
 | 
						|
        WAIT_IO_COMPLETION     = $000000C0;
 | 
						|
 | 
						|
  { This file contains proposed extensions to the Winsock 2 specification to }
 | 
						|
  { support Novell's implementation of namespace providers. }
 | 
						|
 | 
						|
  {___[ Manifest constants ]________________________________________________________________________ }
 | 
						|
  { Proposed output flag for deregistered services }
 | 
						|
  const
 | 
						|
     RESULT_IS_DEREGISTERED = $0002;
 | 
						|
  { Proposed output flag for containers }
 | 
						|
     RESULT_IS_CONTAINER = $0004;
 | 
						|
 | 
						|
  { Values used to indicate an attribute list in the blob }
 | 
						|
  { blob contains ASCII strings }
 | 
						|
 | 
						|
     WS_ATTRLIST_ASCII = $b10bea1a;
 | 
						|
  { blob contains UNICODE strings }
 | 
						|
     WS_ATTRLIST_UNICODE = $b10bea10;
 | 
						|
  {     Name Spaces }
 | 
						|
  { Extends definitions in WINSOCK2.H }
 | 
						|
     NS_BINDERY = 4;
 | 
						|
     NS_SLP = 5;
 | 
						|
  { Predefined BLOB Value Types }
 | 
						|
  { Extends Predefined Value Types in winnt.h }
 | 
						|
 | 
						|
     REG_BOOL    = 11;  // Boolean value; TRUE or FALSE }
 | 
						|
     REG_KEYWORD = 12;  // Keyword with no value
 | 
						|
 | 
						|
  {___[ Type definitions ]__________________________________________________________________________ }
 | 
						|
 | 
						|
    type
 | 
						|
 | 
						|
       TWSAATTRINFO = TWSANSCLASSINFO;
 | 
						|
       LPWSAATTRINFO = ^TWSAATTRINFO;
 | 
						|
       PWSAATTRINFO = ^TWSAATTRINFO;
 | 
						|
    { Structure of a blob containing an attribute list }
 | 
						|
    { Identifies the blob as an attribute list }
 | 
						|
    { Number of attributes present }
 | 
						|
    { Pointer to attribute array }
 | 
						|
 | 
						|
       TWSABlobAttrList = record
 | 
						|
            dwSignature : DWORD;
 | 
						|
            dwAttrCount : DWORD;
 | 
						|
            lpAttributes : PWSAATTRINFO;
 | 
						|
         end;
 | 
						|
       LPWSABLOBATTRLIST = ^TWSABlobAttrList;
 | 
						|
       PWSABLOBATTRLIST = ^TWSABlobAttrList;
 | 
						|
{$endif netware}
 | 
						|
 | 
						|
{--------------------------------------------------------------------}
 | 
						|
 | 
						|
    { Socket function prototypes  }
 | 
						|
   const
 | 
						|
    {$ifndef netware}
 | 
						|
    winsockdll      = 'ws2_32.dll';
 | 
						|
    _fn_bind        = 'bind';
 | 
						|
    _fn_closesocket = 'closesocket';
 | 
						|
    _fn_ioctlsocket = 'ioctlsocket';
 | 
						|
    _fn_getpeername = 'getpeername';
 | 
						|
    _fn_getsockopt  = 'getsockopt';
 | 
						|
    _fn_htonl       = 'htonl';
 | 
						|
    _fn_htons       = 'htons';
 | 
						|
    _fn_inet_addr   = 'inet_addr';
 | 
						|
    _fn_inet_ntoa   = 'inet_ntoa';
 | 
						|
    _fn_listen      = 'listen';
 | 
						|
    _fn_recv        = 'recv';
 | 
						|
    _fn_recvfrom    = 'recvfrom';
 | 
						|
    _fn_select      = 'select';
 | 
						|
    _fn_send        = 'send';
 | 
						|
    _fn_sendto      = 'sendto';
 | 
						|
    _fn_setsockopt  = 'setsockopt';
 | 
						|
    _fn_shutdown    = 'shutdown';
 | 
						|
    _fn_socket      = 'socket';
 | 
						|
    _fn_gethostbyaddr    = 'gethostbyaddr';
 | 
						|
    _fn_gethostbyname    = 'gethostbyname';
 | 
						|
    _fn_gethostname      = 'gethostname';
 | 
						|
    _fn_getservbyport    = 'getservbyport';
 | 
						|
    _fn_getservbyname    = 'getservbyname';
 | 
						|
    _fn_getprotobynumber = 'getprotobynumber';
 | 
						|
    _fn_getprotobyname   = 'getprotobyname';
 | 
						|
    {$else}
 | 
						|
    winsockdll      = 'ws2_32.nlm';
 | 
						|
    {for netware the function names for the non WSA-functions are
 | 
						|
     different because the names are already present from bsd-sockets}
 | 
						|
    _fn_bind        = 'WS2_32_bind';
 | 
						|
    _fn_closesocket = 'WS2_32_closesocket';
 | 
						|
    _fn_ioctlsocket = 'WS2_32_ioctlsocket';
 | 
						|
    _fn_getpeername = 'WS2_32_getpeername';
 | 
						|
    _fn_getsockopt  = 'WS2_32_getsockopt';
 | 
						|
    _fn_htonl       = 'WS2_32_htonl';
 | 
						|
    _fn_htons       = 'WS2_32_htons';
 | 
						|
    _fn_inet_addr   = 'WS2_32_inet_addr';
 | 
						|
    _fn_inet_ntoa   = 'WS2_32_inet_ntoa';
 | 
						|
    _fn_listen      = 'WS2_32_listen';
 | 
						|
    _fn_recv        = 'WS2_32_recv';
 | 
						|
    _fn_recvfrom    = 'WS2_32_recvfrom';
 | 
						|
    _fn_select      = 'WS2_32_select';
 | 
						|
    _fn_send        = 'WS2_32_send';
 | 
						|
    _fn_sendto      = 'WS2_32_sendto';
 | 
						|
    _fn_setsockopt  = 'WS2_32_setsockopt';
 | 
						|
    _fn_shutdown    = 'WS2_32_shutdown';
 | 
						|
    _fn_socket      = 'WS2_32_socket';
 | 
						|
    _fn_gethostbyaddr    = 'WS2_32_gethostbyaddr';
 | 
						|
    _fn_gethostbyname    = 'WS2_32_gethostbyname';
 | 
						|
    _fn_gethostname      = 'WS2_32_gethostname';
 | 
						|
    _fn_getservbyport    = 'WS2_32_getservbyport';
 | 
						|
    _fn_getservbyname    = 'WS2_32_getservbyname';
 | 
						|
    _fn_getprotobynumber = 'WS2_32_getprotobynumber';
 | 
						|
    _fn_getprotobyname   = 'WS2_32_getprotobyname';
 | 
						|
    {$endif}
 | 
						|
 | 
						|
{
 | 
						|
Winsock types all buffers as pchar (char *), modern POSIX does it the ANSI
 | 
						|
C way with pointer (void *). If the pointer overloaded version doesn't exist,
 | 
						|
a "pointer" will be passed to the "var" version. (bug 3142).
 | 
						|
So if there are var/const versions:
 | 
						|
- To keep ported unix code working, there must be "pointer" variants (ANSI)
 | 
						|
- To keep Delphi/ported C Winsock code working there must be pchar variants
 | 
						|
        (K&R)
 | 
						|
IOW, there _must_ be 3 versions then: var/const, pchar and pointer}
 | 
						|
 | 
						|
    {$ifdef netware}
 | 
						|
    function accept(s:TSocket; addr: PSockAddr; addrlen : ptOS_INT) : TSocket;
 | 
						|
    function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;
 | 
						|
    {$else}
 | 
						|
    function accept(s:TSocket; addr: PSockAddr; addrlen : ptOS_INT) : TSocket;stdcall;external winsockdll name 'accept';
 | 
						|
    function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;stdcall;external winsockdll name 'accept';
 | 
						|
    {$endif}
 | 
						|
    function bind(s:TSocket; addr: PSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
 | 
						|
    function bind(s:TSocket; const addr: TSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
 | 
						|
    function closesocket(s:TSocket):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_closesocket;
 | 
						|
    {$ifdef netware}
 | 
						|
    function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
 | 
						|
    function connect(s:TSocket; Const name:TSockAddr; namelen:tOS_INT):tOS_INT;
 | 
						|
    {$else}
 | 
						|
    function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT; stdcall;external winsockdll name 'connect';
 | 
						|
    function connect(s:TSocket; Const name:TSockAddr; namelen:tOS_INT):tOS_INT; stdcall;external winsockdll name 'connect';
 | 
						|
    {$endif}
 | 
						|
 | 
						|
    function ioctlsocket(s:TSocket; cmd:longint; var arg:u_long):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_ioctlsocket;
 | 
						|
    function ioctlsocket(s:TSocket; cmd:longint; var arg:longint):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_ioctlsocket;
 | 
						|
    function ioctlsocket(s:TSocket; cmd:longint; argp:pu_long):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_ioctlsocket;
 | 
						|
    function getpeername(s:TSocket; var name:TSockAddr;var namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getpeername;
 | 
						|
    function getsockname(s:TSocket; var name:TSockAddr;var namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getpeername;
 | 
						|
    function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar;var optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getsockopt;
 | 
						|
    function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pointer;var optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getsockopt;
 | 
						|
    function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT;var optval;var optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_getsockopt;
 | 
						|
    function htonl(hostlong:u_long):u_long;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_htonl;
 | 
						|
    function htons(hostshort:u_short):u_short;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_htons;
 | 
						|
    function inet_addr(cp:pchar):cardinal;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_inet_addr;
 | 
						|
    function inet_ntoa(i : TInAddr):pchar;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_inet_ntoa;
 | 
						|
    function listen(s:TSocket; backlog:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_listen;
 | 
						|
    { are ntohl and ntohs macros or bsd-functions (for netware) ?? }
 | 
						|
    {$ifndef netware}
 | 
						|
    function ntohl(netlong:u_long):u_long;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'ntohl';
 | 
						|
    function ntohs(netshort:u_short):u_short;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'ntohs';
 | 
						|
    {$endif}
 | 
						|
 | 
						|
    function recv(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
 | 
						|
    function recv(s:TSocket;buf:pointer; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
 | 
						|
    function recv(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
 | 
						|
    function recvfrom(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT;from:PSockAddr; fromlen:ptOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
 | 
						|
    function recvfrom(s:TSocket;buf:pointer; len:tOS_INT; flags:tOS_INT;from:PSockAddr; fromlen:ptOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
 | 
						|
    function recvfrom(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT;Const from:TSockAddr; var fromlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
 | 
						|
    function select(nfds:tOS_INT; readfds,writefds,exceptfds : PFDSet;timeout: PTimeVal):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_select;
 | 
						|
    function send(s:TSocket;const buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_send;
 | 
						|
    function send(s:TSocket;buf : pchar; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_send;
 | 
						|
    function send(s:TSocket;buf : pointer; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_send;
 | 
						|
    function sendto(s:TSocket; buf:pchar; len:tOS_INT; flags:tOS_INT;toaddr:PSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_sendto;
 | 
						|
    function sendto(s:TSocket; buf:pointer; len:tOS_INT; flags:tOS_INT;toaddr:PSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_sendto;
 | 
						|
    function sendto(s:TSocket; const buf; len:tOS_INT; flags:tOS_INT;Const toaddr:TSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
 | 
						|
      external winsockdll name _fn_sendto;
 | 
						|
 | 
						|
    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_setsockopt;
 | 
						|
    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; Const optval; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_setsockopt;
 | 
						|
    function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pointer; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_setsockopt;
 | 
						|
    function shutdown(s:TSocket; how:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_shutdown;
 | 
						|
    function socket(af:tOS_INT; t:tOS_INT; protocol:tOS_INT):TSocket;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_socket;
 | 
						|
 | 
						|
    { Database function prototypes  }
 | 
						|
    function gethostbyaddr(addr:pchar; len:tOS_INT; t:tOS_INT): PHostEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_gethostbyaddr;
 | 
						|
    function gethostbyname(name:pchar):PHostEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_gethostbyname;
 | 
						|
    function gethostname(name:pchar; namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_gethostname;
 | 
						|
    function getservbyport(port:tOS_INT; proto:pchar):PServEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_getservbyport;
 | 
						|
    function getservbyname(name:pchar; proto:pchar):PServEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_getservbyname;
 | 
						|
    function getprotobynumber(proto:tOS_INT):PProtoEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_getprotobynumber;
 | 
						|
    function getprotobyname(name:pchar):PProtoEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_getprotobyname;
 | 
						|
 | 
						|
    { Microsoft Windows Extension function prototypes  }
 | 
						|
    function WSAStartup(wVersionRequired:word;var WSAData:TWSADATA):tOS_INT;
 | 
						|
    function WSACleanup:tOS_INT;
 | 
						|
    procedure WSASetLastError(iError:tOS_INT);{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSASetLastError';
 | 
						|
    function WSAGetLastError:tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAGetLastError';
 | 
						|
    {$ifndef netware}
 | 
						|
    //function WSAIsBlocking:BOOL;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAIsBlocking';
 | 
						|
    // function WSAUnhookBlockingHook:tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAUnhookBlockingHook';
 | 
						|
    // function WSASetBlockingHook(lpBlockFunc:TFarProc):TFarProc;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSASetBlockingHook';
 | 
						|
    {$endif}
 | 
						|
    function WSACancelBlockingCall:tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSACancelBlockingCall';
 | 
						|
    {$ifndef netware}
 | 
						|
    function WSAAsyncGetServByName(hWnd:HWND; wMsg:u_int; name:pchar; proto:pchar; buf:pchar;
 | 
						|
                                   buflen:tOS_INT):THandle;stdcall;external winsockdll name 'WSAAsyncGetServByName';
 | 
						|
    function WSAAsyncGetServByPort(hWnd:HWND; wMsg:u_int; port:tOS_INT; proto:pchar; buf:pchar;
 | 
						|
                                   buflen:tOS_INT):THandle;stdcall;external winsockdll name 'WSAAsyncGetServByPort';
 | 
						|
    function WSAAsyncGetProtoByName(hWnd:HWND; wMsg:u_int; name:pchar; buf:pchar; buflen:tOS_INT):THandle;stdcall;
 | 
						|
      external winsockdll name 'WSAAsyncGetProtoByName';
 | 
						|
    function WSAAsyncGetProtoByNumber(hWnd:HWND; wMsg:u_int; number:tOS_INT; buf:pchar; buflen:tOS_INT):THandle;stdcall;
 | 
						|
      external winsockdll name 'WSAAsyncGetProtoByNumber';
 | 
						|
    function WSAAsyncGetHostByName(hWnd:HWND; wMsg:u_int; name:pchar; buf:pchar; buflen:tOS_INT):THandle;stdcall;
 | 
						|
      external winsockdll name 'WSAAsyncGetHostByName';
 | 
						|
    function WSAAsyncGetHostByAddr(hWnd:HWND; wMsg:u_int; addr:pchar; len:tOS_INT; t:tOS_INT;
 | 
						|
                                   buf:pchar; buflen:tOS_INT):THandle;stdcall;
 | 
						|
                                   external winsockdll name 'WSAAsyncGetHostByAddr';
 | 
						|
    function WSACancelAsyncRequest(hAsyncTaskHandle:THandle):tOS_INT;stdcall;
 | 
						|
      external winsockdll name 'WSACancelAsyncRequest';
 | 
						|
    function WSAAsyncSelect(s:TSocket; hWnd:HWND; wMsg:u_int; lEvent:longint):tOS_INT; stdcall;
 | 
						|
      external winsockdll name 'WSAAsyncSelect';
 | 
						|
    function WSARecvEx(s:TSocket;var buf; len:tOS_INT; flags:ptOS_INT):tOS_INT;stdcall;
 | 
						|
      external winsockdll name 'WSARecvEx';
 | 
						|
    {$endif}
 | 
						|
    function __WSAFDIsSet(s:TSocket; var FDSet:TFDSet):Bool;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name '__WSAFDIsSet';
 | 
						|
    function __WSAFDIsSet_(s:TSocket; var FDSet:TFDSet):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name '__WSAFDIsSet';
 | 
						|
 | 
						|
    {$ifndef netware}
 | 
						|
    function TransmitFile(hSocket:TSocket; hFile:THandle; nNumberOfBytesToWrite:dword;
 | 
						|
                          nNumberOfBytesPerSend:DWORD; lpOverlapped:POverlapped;
 | 
						|
                          lpTransmitBuffers:PTransmitFileBuffers; dwReserved:dword):Bool;stdcall;
 | 
						|
                          external winsockdll name 'TransmitFile';
 | 
						|
 | 
						|
    function AcceptEx(sListenSocket,sAcceptSocket:TSocket;
 | 
						|
                      lpOutputBuffer:Pointer; dwReceiveDataLength,dwLocalAddressLength,
 | 
						|
                      dwRemoteAddressLength:dword; var lpdwBytesReceived:dword;
 | 
						|
                      lpOverlapped:POverlapped):Bool;stdcall;
 | 
						|
                      external winsockdll name 'AcceptEx';
 | 
						|
 | 
						|
    procedure GetAcceptExSockaddrs(lpOutputBuffer:Pointer;
 | 
						|
                                   dwReceiveDataLength,dwLocalAddressLength,dwRemoteAddressLength:dword;
 | 
						|
                                   var LocalSockaddr:TSockAddr; var LocalSockaddrLength:tOS_INT;
 | 
						|
                                   var RemoteSockaddr:TSockAddr; var RemoteSockaddrLength:tOS_INT);stdcall;
 | 
						|
                                   external winsockdll name 'GetAcceptExSockaddrs';
 | 
						|
    {$endif}
 | 
						|
 | 
						|
    function WSAMakeSyncReply(Buflen,Error:Word):dword;
 | 
						|
    function WSAMakeSelectReply(Event,Error:Word):dword;
 | 
						|
    function WSAGetAsyncBuflen(Param:dword):Word;
 | 
						|
    function WSAGetAsyncError(Param:dword):Word;
 | 
						|
    function WSAGetSelectEvent(Param:dword):Word;
 | 
						|
    function WSAGetSelectError(Param:dword):Word;
 | 
						|
    procedure FD_CLR(Socket:TSocket; var FDSet:TFDSet);
 | 
						|
    function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
 | 
						|
    procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
 | 
						|
    procedure FD_ZERO(var FDSet:TFDSet);
 | 
						|
 | 
						|
    function MAKELONG(a,b : longint) : LONGINT;
 | 
						|
    function MAKEWORD(a,b : longint) : WORD;
 | 
						|
 | 
						|
    { WinSock 2 API new function prototypes }
 | 
						|
 | 
						|
    function WSAAccept(s: TSocket; addr:PSockAddr; addrlen : ptOS_INT;
 | 
						|
                       lpfnCondition : TCONDITIONPROC;
 | 
						|
                       dwCallbackData: dword) : longint;
 | 
						|
      {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAAccept';
 | 
						|
 | 
						|
    function WSAAccept(s: TSocket; addr:PSockAddr; var addrlen:longint;
 | 
						|
                       lpfnCondition : TCONDITIONPROC;
 | 
						|
                       dwCallbackData: dword) : longint;
 | 
						|
      {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAAccept';
 | 
						|
 | 
						|
    function WSACloseEvent (hEvent : TWSAEVENT) : longint;
 | 
						|
      {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSACloseEvent';
 | 
						|
 | 
						|
    function WSAconnect (s:TSocket; Const name:TSockAddr;
 | 
						|
                         namelen: tOS_INT;
 | 
						|
                         lpCallerData, lpCaleeData : PWSABUF;
 | 
						|
                         lpSQOS, lpGQOS : PQOS) : tOS_INT;
 | 
						|
      {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAConnect';
 | 
						|
 | 
						|
    function WSAconnect (s:TSocket; name:PSockAddr;
 | 
						|
                         namelen: tOS_INT;
 | 
						|
                         lpCallerData, lpCaleeData : PWSABUF;
 | 
						|
                         lpSQOS, lpGQOS : PQOS) : tOS_INT;
 | 
						|
      {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAConnect';
 | 
						|
 | 
						|
    {$ifndef netware}
 | 
						|
    function WSADuplicateSocket (s:TSocket; dwProcessId:dword; lpProtoInfo: PWSAPROTOCOL_INFOA) : longint;
 | 
						|
      {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSADuplicateSocketA';
 | 
						|
    {$endif}
 | 
						|
 | 
						|
    function WSAEnumNetworkEvents(s:TSocket;hEventObject:TWSAEVENT;lpNetworkEvents:PWSANETWORKEVENTS): longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAEnumNetworkEvents';
 | 
						|
 | 
						|
    function WSAEnumProtocols (lpiProtocols:LPINT;
 | 
						|
                               lpProtocolBuffer:PWSAPROTOCOL_INFOA;
 | 
						|
                               var lpdwBufferLength : dword) : longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAEnumProtocolsA';
 | 
						|
 | 
						|
    function WSAEventSelect(s:TSocket; hEventObject: TWSAEvent;lNetworkEvents:longint):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAEventSelect';
 | 
						|
 | 
						|
    function WSAGetOverlappedResult (s:TSocket;
 | 
						|
                                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                                     lpcbTransfer : LPDWORD;
 | 
						|
                                     fWait        : BOOL;
 | 
						|
                                     lpdwFlags    : LPDWORD) : longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAGetOverlappedResult';
 | 
						|
 | 
						|
    function WSAGetQOSByName(s:TSocket; lpQOSName: LPWSABUF; lpQOS:PQOS) : longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAGetQOSByName';
 | 
						|
 | 
						|
    function WSAHtonl(s:TSocket; hostlong:u_long;lpnetlong:pu_long):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAHtonl';
 | 
						|
 | 
						|
    function WSAHtonl(s:TSocket; hostlong:u_long;var lpnetlong:u_long):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAHtonl';
 | 
						|
 | 
						|
    function WSAHtons(s:TSocket; hostshort:u_short;lpnetshort:pu_short):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAHtons';
 | 
						|
 | 
						|
    function WSAHtons(s:TSocket; hostshort:u_short;var lpnetshort:u_short):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAHtons';
 | 
						|
 | 
						|
    function WSAIoctl(s:TSocket;dwIoControlCode:dword;
 | 
						|
                      lpvInBuffer:pointer; cbInBuffer:dword;
 | 
						|
                      lpvOutBuffer:pointer; cbOutBuffer:dword;
 | 
						|
                      lpcbBytesReturned:LPDWORD;
 | 
						|
                      lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                      lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAIoctl';
 | 
						|
 | 
						|
    function WSAIoctl(s:TSocket;dwIoControlCode:dword;
 | 
						|
                      var lpvInBuffer; cbInBuffer:dword;
 | 
						|
                      var lpvOutBuffer; cbOutBuffer:dword;
 | 
						|
                      var lpcbBytesReturned:DWORD;
 | 
						|
                      lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                      lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAIoctl';
 | 
						|
 | 
						|
    function WSAJoinLeaf(s:TSocket; name: PSockAddr; namelen:longint;
 | 
						|
                         lpCallerData,lpCalleeData:PWSABUF;
 | 
						|
                         lpSQOS, lpGQOS : PQOS; dwFlags:dword):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAJoinLeaf';
 | 
						|
 | 
						|
    function WSANtohl(s:TSocket;netlong:u_long;lphostlong:pu_long):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSANtohl';
 | 
						|
 | 
						|
    function WSANtohl(s:TSocket;netlong:u_long;var hostlong:u_long):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSANtohl';
 | 
						|
 | 
						|
    function WSANtohs(s:TSocket;netshort:u_short;lphostshort:pu_short):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSANtohs';
 | 
						|
 | 
						|
    function WSANtohs(s:TSocket;netshort:u_short;var hostshort:u_short):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSANtohs';
 | 
						|
 | 
						|
    function WSARecv(s:TSocket;buf:pchar; dwBufferCount:dword;
 | 
						|
                     lpNumberOfBytesRecvd,lpFlags : LPDWORD;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecv';
 | 
						|
 | 
						|
    function WSARecv(s:TSocket;buf:pointer; dwBufferCount:dword;
 | 
						|
                     lpNumberOfBytesRecvd,lpFlags : LPDWORD;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecv';
 | 
						|
 | 
						|
    function WSARecv(s:TSocket;var buf; dwBufferCount:dword;
 | 
						|
                     var lpNumberOfBytesRecvd,lpFlags : DWORD;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecv';
 | 
						|
 | 
						|
    function WSARecvDisconnect(s:TSocket;lpInboundDisconnectData:PWSABUF):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecvDisconnect';
 | 
						|
 | 
						|
    function WSARecvDisconnect(s:TSocket;var InboundDisconnectData:TWSABUF):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecvDisconnect';
 | 
						|
 | 
						|
    function WSARecvFrom(s:TSocket;buf:pchar; dwBufferCount:dword;
 | 
						|
                     lpNumberOfBytesRecvd,lpFlags : LPDWORD;
 | 
						|
                     lpFrom: PSockaddr;
 | 
						|
                     lpFromlen: PDWORD;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecvFrom';
 | 
						|
 | 
						|
    function WSARecvFrom(s:TSocket;buf:pointer; dwBufferCount:dword;
 | 
						|
                     lpNumberOfBytesRecvd,lpFlags : LPDWORD;
 | 
						|
                     lpFrom: PSockaddr;
 | 
						|
                     lpFromlen: PDWORD;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecvFrom';
 | 
						|
 | 
						|
    function WSARecvFrom(s:TSocket;var buf; dwBufferCount:dword;
 | 
						|
                     var lpNumberOfBytesRecvd,lpFlags : DWORD;
 | 
						|
                     var lpFrom: TSockaddr;
 | 
						|
                     var lpFromlen: DWORD;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSARecvFrom';
 | 
						|
 | 
						|
    function WSAResetEvent(hEvent:TWSAEVENT):BOOL;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAResetEvent';
 | 
						|
 | 
						|
    function WSASend(s:TSocket;buf:pchar;len:dword;
 | 
						|
                     NumberOfBytesSent:PDWORD; Flags:dword;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASend';
 | 
						|
 | 
						|
    function WSASend(s:TSocket;buf:pointer;len:dword;
 | 
						|
                     NumberOfBytesSent:PDWORD; Flags:dword;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASend';
 | 
						|
 | 
						|
    function WSASend(s:TSocket;var buf;len:dword;
 | 
						|
                     var NumberOfBytesSent: DWORD; Flags:dword;
 | 
						|
                     lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                     lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASend';
 | 
						|
 | 
						|
    function WSASendDisconnect(s:TSocket;lpOutboundDisconnectData:PWSABUF):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASendDisconnect';
 | 
						|
 | 
						|
    function WSASendTo(s:TSocket;buf:pchar;len:dword;
 | 
						|
                       NumberOfBytesSent:LPDWORD;
 | 
						|
                       Flags:dword;
 | 
						|
                       lpTo: PSockaddr;
 | 
						|
                       iToLen:dword;
 | 
						|
                       lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                       lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASendTo';
 | 
						|
 | 
						|
    function WSASendTo(s:TSocket;buf:pointer;len:dword;
 | 
						|
                       NumberOfBytesSent:LPDWORD;
 | 
						|
                       Flags:dword;
 | 
						|
                       lpTo: PSockaddr;
 | 
						|
                       iToLen:dword;
 | 
						|
                       lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                       lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASendTo';
 | 
						|
 | 
						|
    function WSASendTo(s:TSocket;var buf;len:dword;
 | 
						|
                       var NumberOfBytesSent:DWORD;
 | 
						|
                       Flags:dword;
 | 
						|
                       var lpTo: TSockaddr;
 | 
						|
                       iToLen:dword;
 | 
						|
                       lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                       lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASendTo';
 | 
						|
 | 
						|
    function WSASetEvent(hEvent:TWSAEVENT):BOOL;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASetEvent';
 | 
						|
 | 
						|
    function WSASocket(af,typ,proto:tOS_INT;
 | 
						|
                       lpProtocolInfo:PWSAPROTOCOL_INFO;
 | 
						|
                       g : TGROUP; Flags:dword):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSASocketA';
 | 
						|
 | 
						|
    function WSAWaitForMultipleEvents(cEvents:dword;
 | 
						|
                                      lphEvents:pointer; {IN const WSAEVENT FAR * lphEvents,}
 | 
						|
                                      fWaitAll:BOOL; dwTimeout:dword; fAlertable:BOOL):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAWaitForMultipleEvents';
 | 
						|
 | 
						|
    function WSAAddressToString(addr:PSockAddr; len:dword;
 | 
						|
                               ProtocolInfo:PWSAPROTOCOL_INFO;
 | 
						|
                               lpszAddressString:pchar;
 | 
						|
                               lpdwAddressStringLength:lpdword):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAAddressToStringA';
 | 
						|
 | 
						|
    function WSAAddressToString(var addr:TSockAddr; len:dword;
 | 
						|
                               ProtocolInfo:PWSAPROTOCOL_INFO;
 | 
						|
                               lpszAddressString:pchar;
 | 
						|
                               var lpdwAddressStringLength:dword):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAAddressToStringA';
 | 
						|
 | 
						|
    function WSAStringToAddress (AddressString  : pchar;
 | 
						|
                                 AddressFamily  : longint;
 | 
						|
                                 lpProtocolInfo : PWSAPROTOCOL_INFOA;
 | 
						|
                             VAR lpAddress      : TSOCKADDR;
 | 
						|
                             VAR lpAddressLength: LONGINT) : longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name 'WSAStringToAddressA';
 | 
						|
 | 
						|
    function WSAStringToAddress (AddressString  : pchar;
 | 
						|
                                 AddressFamily  : longint;
 | 
						|
                                 lpProtocolInfo : PWSAPROTOCOL_INFOA;
 | 
						|
                                 lpAddress      : PSOCKADDR;
 | 
						|
                             VAR lpAddressLength: LONGINT) : longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAStringToAddressA';
 | 
						|
 | 
						|
    function WSALookupServiceBegin(lpqsRestrictions:PWSAQUERYSET;
 | 
						|
                                    ControlFlags:dword;lphLookup:PHandle):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSALookupServiceBeginA';
 | 
						|
 | 
						|
    function WSALookupServiceBegin(var Restrictions:TWSAQUERYSET;
 | 
						|
                                    ControlFlags:dword;var hLookup:THandle):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSALookupServiceBeginA';
 | 
						|
 | 
						|
    function WSALookupServiceNext(hLookup:THandle;ControlFlags:dword;
 | 
						|
                                   lpdwBufferLength:LPDWORD;
 | 
						|
                                   lpqsResults:PWSAQUERYSET):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSALookupServiceNextA';
 | 
						|
 | 
						|
    function WSAInstallServiceClass(lpServiceClassInfo:PWSASERVICECLASSINFO):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAInstallServiceClassA';
 | 
						|
 | 
						|
    function WSARemoveServiceClass(lpServiceClassId:PGUID):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSARemoveServiceClass';
 | 
						|
 | 
						|
    function WSAGetServiceClassInfo(lpProviderId,lpServiceClassId:PGUID;
 | 
						|
                                     lpdwBufSize:LPDWORD;
 | 
						|
                                     lpServiceClassInfo:PWSASERVICECLASSINFO):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAGetServiceClassInfoA';
 | 
						|
 | 
						|
    function WSAGetServiceClassInfo(var ProviderId,ServiceClassId:TGUID;
 | 
						|
                                    var BufSize:DWORD;
 | 
						|
                                    var ServiceClassInfo:TWSASERVICECLASSINFO):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAGetServiceClassInfoA';
 | 
						|
 | 
						|
    function WSAEnumNameSpaceProviders(lpdwBufferLength:LPDWORD;lpnspBuffer:PWSANAMESPACE_INFO):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAEnumNameSpaceProvidersA';
 | 
						|
 | 
						|
    function WSAEnumNameSpaceProviders(var BufferLength:DWORD;var Buffer:TWSANAMESPACE_INFO):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAEnumNameSpaceProvidersA';
 | 
						|
 | 
						|
    function WSAGetServiceClassNameByClassId(lpServiceClassId:PGUID;lpszServiceClassName:pchar;buflen:PDWORD):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAGetServiceClassNameByClassIdA';
 | 
						|
 | 
						|
    function WSAGetServiceClassNameByClassId(var lpServiceClassId:TGUID;lpszServiceClassName:pchar;var buflen:DWORD):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAGetServiceClassNameByClassIdA';
 | 
						|
 | 
						|
    function WSASetService(lpqsRegInfo:PWSAQUERYSET;essoperation:TWSAESETSERVICEOP;flags:dword):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSASetServiceA';
 | 
						|
 | 
						|
   {$ifndef Netware}
 | 
						|
    function WSAProviderConfigChange(lpNotificationHandle:LPHANDLE;
 | 
						|
                       lpOverlapped:PWSAOVERLAPPED;
 | 
						|
                       lpCompletionRoutine:TWSAOVERLAPPED_COMPLETION_ROUTINE):longint;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAProviderConfigChange';
 | 
						|
   {$endif}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
  implementation
 | 
						|
 | 
						|
    { was #define dname(params) def_expr }
 | 
						|
    { argument types are unknown }
 | 
						|
    function MAKELONG(a,b : longint) : LONGINT;
 | 
						|
    begin
 | 
						|
       MAKELONG:=LONGINT((WORD(a)) or ((DWORD(WORD(b))) shl 16));
 | 
						|
    end;
 | 
						|
 | 
						|
    function MAKEWORD(a,b : longint) : WORD;
 | 
						|
    begin
 | 
						|
       MAKEWORD:=WORD((BYTE(a)) or ((WORD(BYTE(b))) shl 8));
 | 
						|
    end;
 | 
						|
 | 
						|
    {
 | 
						|
      Implementation of the helper routines
 | 
						|
    }
 | 
						|
    function WSAMakeSyncReply(Buflen,Error:Word):dword;
 | 
						|
 | 
						|
      begin
 | 
						|
         WSAMakeSyncReply:=MakeLong(Buflen, Error);
 | 
						|
      end;
 | 
						|
 | 
						|
    function WSAMakeSelectReply(Event,Error:Word):dword;
 | 
						|
 | 
						|
      begin
 | 
						|
         WSAMakeSelectReply:=MakeLong(Event,Error);
 | 
						|
      end;
 | 
						|
 | 
						|
    function WSAGetAsyncBuflen(Param:dword):Word;
 | 
						|
 | 
						|
      begin
 | 
						|
         WSAGetAsyncBuflen:=lo(Param);
 | 
						|
      end;
 | 
						|
 | 
						|
    function WSAGetAsyncError(Param:dword):Word;
 | 
						|
 | 
						|
      begin
 | 
						|
         WSAGetAsyncError:=hi(Param);
 | 
						|
      end;
 | 
						|
 | 
						|
    function WSAGetSelectEvent(Param:dword):Word;
 | 
						|
 | 
						|
      begin
 | 
						|
         WSAGetSelectEvent:=lo(Param);
 | 
						|
      end;
 | 
						|
 | 
						|
    function WSAGetSelectError(Param:dword):Word;
 | 
						|
 | 
						|
      begin
 | 
						|
         WSAGetSelectError:=hi(Param);
 | 
						|
      end;
 | 
						|
 | 
						|
    procedure FD_CLR(Socket:TSocket; var FDSet:TFDSet);
 | 
						|
 | 
						|
      var
 | 
						|
         i : u_int;
 | 
						|
 | 
						|
      begin
 | 
						|
         i:=0;
 | 
						|
         while i<FDSet.fd_count do
 | 
						|
           begin
 | 
						|
              if FDSet.fd_array[i]=Socket then
 | 
						|
                begin
 | 
						|
                   while i<FDSet.fd_count-1 do
 | 
						|
                     begin
 | 
						|
                        FDSet.fd_array[i]:=FDSet.fd_array[i+1];
 | 
						|
                        inc(i);
 | 
						|
                     end;
 | 
						|
                   dec(FDSet.fd_count);
 | 
						|
                   break;
 | 
						|
                end;
 | 
						|
              inc(i);
 | 
						|
           end;
 | 
						|
      end;
 | 
						|
 | 
						|
    function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
 | 
						|
    begin
 | 
						|
       FD_ISSET:=__WSAFDIsSet(Socket,FDSet);
 | 
						|
    end;
 | 
						|
 | 
						|
    procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
 | 
						|
    var i : integer;
 | 
						|
    begin
 | 
						|
      if FDSet.fd_count > FD_SETSIZE then
 | 
						|
        FDSet.fd_count := FD_SETSIZE;
 | 
						|
      for i := 1 to FDSet.fd_count do
 | 
						|
        if FDSet.fd_array[i-1] = Socket then exit;  {this is what the c macro FD_SET does}
 | 
						|
      if FDSet.fd_count<FD_SETSIZE then
 | 
						|
      begin
 | 
						|
        FDSet.fd_array[FDSet.fd_count]:=Socket;
 | 
						|
        Inc(FDSet.fd_count);
 | 
						|
      end;
 | 
						|
    end;
 | 
						|
 | 
						|
    procedure FD_ZERO(var FDSet:TFDSet);
 | 
						|
    begin
 | 
						|
      fillchar(FDSet,sizeof(FDSet),0);
 | 
						|
      {FDSet.fd_count:=0;}
 | 
						|
    end;
 | 
						|
 | 
						|
    {$ifdef netware}
 | 
						|
      {windows has connect and accept in ws2_32.dll, netware has not, they
 | 
						|
       are defined as macros in ws2nlm.h }
 | 
						|
 | 
						|
    function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
 | 
						|
    begin
 | 
						|
      connect := WSAConnect (s,addr,namelen,nil,nil,nil,nil);
 | 
						|
    end;
 | 
						|
 | 
						|
    function connect(s:TSocket; Const name:TSockAddr; namelen:tOS_INT):tOS_INT; //cdecl;external winsockdll name 'WSAConnect';
 | 
						|
    begin
 | 
						|
      connect := WSAConnect (s,@name,namelen,nil,nil,nil,nil);
 | 
						|
    end;
 | 
						|
 | 
						|
    function accept(s:TSocket; addr: PSockAddr; addrlen : ptOS_INT) : TSocket;
 | 
						|
    begin
 | 
						|
      accept := WSAAccept (s,addr,addrlen,nil,0);
 | 
						|
    end;
 | 
						|
 | 
						|
    function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;
 | 
						|
    begin
 | 
						|
      accept := WSAAccept (s,addr,@addrlen,nil,0);
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
    {$endif}
 | 
						|
 | 
						|
    {AD 2003/03/25: Special for netware
 | 
						|
     if WSAStartup is called more than once, bad thinks will happen
 | 
						|
     on netware. This is not a problem under windows.
 | 
						|
     This happens with fcl because the unit initialization of SSockets and
 | 
						|
     resolve both calls WSAStartup, for the second startup we simply
 | 
						|
     return success without calling the WS2_32 WSAStartup }
 | 
						|
 | 
						|
    function __WSAStartup(wVersionRequired:word;var WSAData:TWSADATA):tOS_INT;
 | 
						|
    {$ifdef Netware}cdecl;{$else}stdcall;{$endif}
 | 
						|
      external winsockdll name 'WSAStartup';
 | 
						|
 | 
						|
    function __WSACleanup:tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSACleanup';
 | 
						|
 | 
						|
    var WSAstartupData : TWSADATA;
 | 
						|
 | 
						|
    function WSACleanup:tOS_INT;
 | 
						|
    begin
 | 
						|
      if WSAstartupData.wVersion <> $ffff then
 | 
						|
      begin
 | 
						|
        Result := __WSACleanup;
 | 
						|
        if Result = 0 then WSAstartupData.wVersion := $ffff;
 | 
						|
      end else Result := WSANOTINITIALISED;
 | 
						|
    end;
 | 
						|
 | 
						|
    function WSAStartup(wVersionRequired:word;var WSAData:TWSADATA):tOS_INT;
 | 
						|
    begin
 | 
						|
      if WSAstartupData.wVersion = $ffff then
 | 
						|
      begin
 | 
						|
        Result := __WSAStartup(wVersionRequired,WSAData);
 | 
						|
        if Result = 0 then WSAstartupData := WSAData;
 | 
						|
        {Writeln (stderr,'WSAStartup called');}
 | 
						|
      end else
 | 
						|
      begin
 | 
						|
        result := 0;
 | 
						|
        {Writeln (stderr,'WSAStartup should be called only once !');}
 | 
						|
      end;
 | 
						|
    end;
 | 
						|
 | 
						|
var
 | 
						|
  oldUnloadProc : pointer;
 | 
						|
 | 
						|
    procedure exitProc;
 | 
						|
    begin
 | 
						|
      {$ifdef DEBUG_MT}
 | 
						|
      ConsolePrintf (#13'winsock.exitProc called'#13#10);
 | 
						|
      {$endif}
 | 
						|
      NetwareUnloadProc := oldUnloadProc;
 | 
						|
      WSACleanup;
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
initialization
 | 
						|
  WSAstartupData.wVersion := $ffff;
 | 
						|
  oldUnloadProc := NetwareUnloadProc;
 | 
						|
  NetwareUnloadProc := @exitProc;
 | 
						|
finalization
 | 
						|
  WSACleanUp;
 | 
						|
end.
 | 
						|
{
 | 
						|
  $Log$
 | 
						|
  Revision 1.6  2005-02-14 17:13:30  peter
 | 
						|
    * truncate log
 | 
						|
 | 
						|
}
 |