Repository URL to install this package:
Version:
3.0.0 ▾
|
{******************************************************************************}
{ }
{ Winsock API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: winsock.h, released June 2000. The original Pascal }
{ code is: WinSock.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI }
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
// $Id: JwaWinSock.pas,v 1.12 2007/09/05 11:58:54 dezipaitor Exp $
{$IFNDEF JWA_OMIT_SECTIONS}
unit JwaWinSock;
{$WEAKPACKAGEUNIT}
{$ENDIF JWA_OMIT_SECTIONS}
{$HPPEMIT ''}
{$HPPEMIT '#include "winsock.h"'}
{$HPPEMIT ''}
{$IFNDEF JWA_OMIT_SECTIONS}
{$I jediapilib.inc}
interface
uses
JwaWinType, JwaWinBase;
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
(*
* Basic system type definitions, taken from the BSD file sys/types.h.
*)
type
u_char = Byte;
{$EXTERNALSYM u_char}
u_short = Word;
{$EXTERNALSYM u_short}
u_int = Cardinal;
{$EXTERNALSYM u_int}
u_long = Cardinal;
{$EXTERNALSYM u_long}
(*
* The new type to be used in all
* instances which refer to sockets.
*)
type
TSocket = UINT_PTR;
(*
* Select uses arrays of SOCKETs. These macros manipulate such
* arrays. FD_SETSIZE may be defined by the user before including
* this file, but the default here should be >= 64.
*
* CAVEAT IMPLEMENTOR and USER: THESE MACROS AND TYPES MUST BE
* INCLUDED IN WINSOCK.H EXACTLY AS SHOWN HERE.
*)
const
FD_SETSIZE = 64;
{$EXTERNALSYM FD_SETSIZE}
type
fd_set = record
fd_count: u_int; // how many are SET?
fd_array: array [0..FD_SETSIZE - 1] of TSocket; // an array of SOCKETs
end;
{$EXTERNALSYM fd_set}
TFdSet = fd_set;
PFdSet = ^fd_set;
function __WSAFDIsSet(s: TSocket; var FDSet: TFDSet): Integer; stdcall;
{$EXTERNALSYM __WSAFDIsSet}
procedure FD_CLR(fd: TSocket; var fdset: TFdSet);
{$EXTERNALSYM FD_CLR}
procedure _FD_SET(fd: TSocket; var fdset: TFDSet);
//{$EXTERNALSYM FD_SET}
procedure FD_ZERO(var fdset: TFdSet);
{$EXTERNALSYM FD_ZERO}
function FD_ISSET(fd: TSocket; var fdset: TFdSet): Boolean;
{$EXTERNALSYM FD_ISSET}
(*
* Structure used in select() call, taken from the BSD file sys/time.h.
*)
type
timeval = record
tv_sec: Longint; // seconds
tv_usec: Longint; // and microseconds
end;
{$EXTERNALSYM timeval}
TTimeVal = timeval;
PTimeVal = ^timeval;
(*
* Operations on timevals.
*
* NB: timercmp does not work for >= or <=.
*)
function timerisset(const tvp: TTimeVal): Boolean;
{$EXTERNALSYM timerisset}
//function timercmp(const tvp, uvp: TTimeVal; cmp): Boolean;
//{$EXTERNALSYM timercmp}
procedure timerclear(var tvp: TTimeVal);
{$EXTERNALSYM timerclear}
(*
* Commands for ioctlsocket(), taken from the BSD file fcntl.h.
*
*
* Ioctl's have the command encoded in the lower word,
* and the size of any in or out parameters in the upper
* word. The high 2 bits of the upper word are used
* to encode the in/out status of the parameter; for now
* we restrict parameters to at most 128 bytes.
*)
const
IOCPARM_MASK = $7f; // parameters must be < 128 bytes
{$EXTERNALSYM IOCPARM_MASK}
IOC_VOID = $20000000; // no parameters
{$EXTERNALSYM IOC_VOID}
IOC_OUT = $40000000; // copy out parameters
{$EXTERNALSYM IOC_OUT}
IOC_IN = DWORD($80000000); // copy in parameters
{$EXTERNALSYM IOC_IN}
IOC_INOUT = DWORD(IOC_IN or IOC_OUT);
{$EXTERNALSYM IOC_INOUT}
// 0x20000000 distinguishes new & old ioctl's
function _IO(x, y: DWORD): DWORD;
{$EXTERNALSYM _IO}
function _IOR(x, y, t: DWORD): DWORD;
{$EXTERNALSYM _IOR}
function _IOW(x, y, t: DWORD): DWORD;
{$EXTERNALSYM _IOW}
const
FIONREAD = IOC_OUT or ((SizeOf(u_long) and IOCPARM_MASK) shl 16) or (Ord('f') shl 8) or 127; // get # bytes to read
{$EXTERNALSYM FIONREAD}
FIONBIO = IOC_OUT or ((SizeOf(u_long) and IOCPARM_MASK) shl 16) or (Ord('f') shl 8) or 126; // set/clear non-blocking i/o
{$EXTERNALSYM FIONBIO}
FIOASYNC = IOC_OUT or ((SizeOf(u_long) and IOCPARM_MASK) shl 16) or (Ord('f') shl 8) or 125; // set/clear async i/o
{$EXTERNALSYM FIOASYNC}
(* Socket I/O Controls *)
SIOCSHIWAT = DWORD(IOC_IN or ((SizeOf(u_long) and IOCPARM_MASK) shl 16) or (Ord('s') shl 8) or 0); // set high watermark
{$EXTERNALSYM SIOCSHIWAT}
SIOCGHIWAT = IOC_OUT or ((SizeOf(u_long) and IOCPARM_MASK) shl 16) or (Ord('s') shl 8) or 1; // get high watermark
{$EXTERNALSYM SIOCGHIWAT}
SIOCSLOWAT = DWORD(IOC_IN or ((SizeOf(u_long) and IOCPARM_MASK) shl 16) or (Ord('s') shl 8) or 2); // set low watermark
{$EXTERNALSYM SIOCSLOWAT}
SIOCGLOWAT = IOC_OUT or ((SizeOf(u_long) and IOCPARM_MASK) shl 16) or (Ord('s') shl 8) or 3; // get low watermark
{$EXTERNALSYM SIOCGLOWAT}
SIOCATMARK = IOC_OUT or ((SizeOf(u_long) and IOCPARM_MASK) shl 16) or (Ord('s') shl 8) or 7; // at oob mark?
{$EXTERNALSYM SIOCATMARK}
(*
* 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).
*)
type
hostent = record
h_name: PChar; // official name of host
h_aliases: PPChar; // alias list
h_addrtype: Smallint; // host address type
h_length: Smallint; // length of address
case Integer of
0: (h_addr_list: PPChar); // list of addresses
1: (h_addr: PPChar); // address, for backward compat
end;
{$EXTERNALSYM hostent}
THostEnt = hostent;
PHostEnt = ^hostent;
(*
* It is assumed here that a network number
* fits in 32 bits.
*)
type
netent = record
n_name: PChar; // official name of net
n_aliases: PPChar; // alias list
n_addrtype: Smallint; // net address type
n_net: u_long; // network #
end;
{$EXTERNALSYM netent}
TNetEnt = netent;
PNetEnt = ^netent;
servent = record
s_name: PChar; // official service name
s_aliases: PPChar; // alias list
s_port: Smallint; // port #
s_proto: PChar; // protocol to use
end;
{$EXTERNALSYM servent}
TServEnt = servent;
PServEnt = ^servent;
protoent = record
p_name: PChar; // official protocol name
p_aliases: PPChar; // alias list
p_proto: Smallint; // protocol #
end;
{$EXTERNALSYM protoent}
TProtoEnt = protoent;
PProtoEnt = ^protoent;
(*
* Constants and structures defined by the internet system,
* Per RFC 790, September 1981, taken from the BSD file netinet/in.h.
*)
(*
* Protocols
*)
const
IPPROTO_IP = 0; // dummy for IP
{$EXTERNALSYM IPPROTO_IP}
IPPROTO_ICMP = 1; // control message protocol
{$EXTERNALSYM IPPROTO_ICMP}
IPPROTO_IGMP = 2; // internet group management protocol
{$EXTERNALSYM IPPROTO_IGMP}
IPPROTO_GGP = 3; // gateway^2 (deprecated)
{$EXTERNALSYM IPPROTO_GGP}
IPPROTO_TCP = 6; // tcp
{$EXTERNALSYM IPPROTO_TCP}
IPPROTO_PUP = 12; // pup
{$EXTERNALSYM IPPROTO_PUP}
IPPROTO_UDP = 17; // user datagram protocol
{$EXTERNALSYM IPPROTO_UDP}
IPPROTO_IDP = 22; // xns idp
{$EXTERNALSYM IPPROTO_IDP}
IPPROTO_ND = 77; // UNOFFICIAL net disk proto
{$EXTERNALSYM IPPROTO_ND}
IPPROTO_RAW = 255; // raw IP packet
{$EXTERNALSYM IPPROTO_RAW}
IPPROTO_MAX = 256;
{$EXTERNALSYM IPPROTO_MAX}
(*
* Port/socket numbers: network standard functions
*)
IPPORT_ECHO = 7;
{$EXTERNALSYM IPPORT_ECHO}
IPPORT_DISCARD = 9;
{$EXTERNALSYM IPPORT_DISCARD}
IPPORT_SYSTAT = 11;
{$EXTERNALSYM IPPORT_SYSTAT}
IPPORT_DAYTIME = 13;
{$EXTERNALSYM IPPORT_DAYTIME}
IPPORT_NETSTAT = 15;
{$EXTERNALSYM IPPORT_NETSTAT}
IPPORT_FTP = 21;
{$EXTERNALSYM IPPORT_FTP}
IPPORT_TELNET = 23;
{$EXTERNALSYM IPPORT_TELNET}
IPPORT_SMTP = 25;
{$EXTERNALSYM IPPORT_SMTP}
IPPORT_TIMESERVER = 37;
{$EXTERNALSYM IPPORT_TIMESERVER}
IPPORT_NAMESERVER = 42;
{$EXTERNALSYM IPPORT_NAMESERVER}
IPPORT_WHOIS = 43;
{$EXTERNALSYM IPPORT_WHOIS}
IPPORT_MTP = 57;
{$EXTERNALSYM IPPORT_MTP}
(*
* Port/socket numbers: host specific functions
*)
IPPORT_TFTP = 69;
{$EXTERNALSYM IPPORT_TFTP}
IPPORT_RJE = 77;
{$EXTERNALSYM IPPORT_RJE}
IPPORT_FINGER = 79;
{$EXTERNALSYM IPPORT_FINGER}
IPPORT_TTYLINK = 87;
{$EXTERNALSYM IPPORT_TTYLINK}
IPPORT_SUPDUP = 95;
{$EXTERNALSYM IPPORT_SUPDUP}
(*
* UNIX TCP sockets
*)
IPPORT_EXECSERVER = 512;
{$EXTERNALSYM IPPORT_EXECSERVER}
IPPORT_LOGINSERVER = 513;
{$EXTERNALSYM IPPORT_LOGINSERVER}
IPPORT_CMDSERVER = 514;
{$EXTERNALSYM IPPORT_CMDSERVER}
IPPORT_EFSSERVER = 520;
{$EXTERNALSYM IPPORT_EFSSERVER}
(*
* UNIX UDP sockets
*)
IPPORT_BIFFUDP = 512;
{$EXTERNALSYM IPPORT_BIFFUDP}
IPPORT_WHOSERVER = 513;
{$EXTERNALSYM IPPORT_WHOSERVER}
IPPORT_ROUTESERVER = 520;
{$EXTERNALSYM IPPORT_ROUTESERVER}
(* 520+1 also used *)
(*
* Ports < IPPORT_RESERVED are reserved for
* privileged processes (e.g. root).
*)
IPPORT_RESERVED = 1024;
{$EXTERNALSYM IPPORT_RESERVED}
(*
* Link numbers
*)
IMPLINK_IP = 155;
{$EXTERNALSYM IMPLINK_IP}
IMPLINK_LOWEXPER = 156;
{$EXTERNALSYM IMPLINK_LOWEXPER}
IMPLINK_HIGHEXPER = 158;
{$EXTERNALSYM IMPLINK_HIGHEXPER}
(*
* Internet address (old style... should be updated)
*)
type
SunB = packed record
s_b1, s_b2, s_b3, s_b4: u_char;
end;
{$EXTERNALSYM SunB}
SunW = packed record
s_w1, s_w2: u_short;
end;
{$EXTERNALSYM SunW}
in_addr = record
case Integer of
0: (S_un_b: SunB);
1: (S_un_w: SunW);
2: (S_addr: u_long);
// #define s_addr S_un.S_addr // can be used for most tcp & ip code
// #define s_host S_un.S_un_b.s_b2 // host on imp
// #define s_net S_un.S_un_b.s_b1 // netword
// #define s_imp S_un.S_un_w.s_w2 // imp
// #define s_impno S_un.S_un_b.s_b4 // imp #
// #define s_lh S_un.S_un_b.s_b3 // logical host
end;
{$EXTERNALSYM in_addr}
TInAddr = in_addr;
PInAddr = ^in_addr;
(*
* Definitions of bits in internet address integers.
* On subnets, the decomposition of addresses to host and net parts
* is done according to subnet mask, not the masks here.
*)
function IN_CLASSA(i: DWORD): Boolean;
{$EXTERNALSYM IN_CLASSA}
const
IN_CLASSA_NET = DWORD($ff000000);
{$EXTERNALSYM IN_CLASSA_NET}
IN_CLASSA_NSHIFT = 24;
{$EXTERNALSYM IN_CLASSA_NSHIFT}
IN_CLASSA_HOST = $00ffffff;
{$EXTERNALSYM IN_CLASSA_HOST}
IN_CLASSA_MAX = 128;
{$EXTERNALSYM IN_CLASSA_MAX}
function IN_CLASSB(i: DWORD): Boolean;
{$EXTERNALSYM IN_CLASSB}
const
IN_CLASSB_NET = DWORD($ffff0000);
{$EXTERNALSYM IN_CLASSB_NET}
IN_CLASSB_NSHIFT = 16;
{$EXTERNALSYM IN_CLASSB_NSHIFT}
IN_CLASSB_HOST = $0000ffff;
{$EXTERNALSYM IN_CLASSB_HOST}
IN_CLASSB_MAX = 65536;
{$EXTERNALSYM IN_CLASSB_MAX}
function IN_CLASSC(i: DWORD): Boolean;
{$EXTERNALSYM IN_CLASSC}
const
IN_CLASSC_NET = DWORD($ffffff00);
{$EXTERNALSYM IN_CLASSC_NET}
IN_CLASSC_NSHIFT = 8;
{$EXTERNALSYM IN_CLASSC_NSHIFT}
IN_CLASSC_HOST = $000000ff;
{$EXTERNALSYM IN_CLASSC_HOST}
const
INADDR_ANY = u_long($00000000);
{$EXTERNALSYM INADDR_ANY}
INADDR_LOOPBACK = $7f000001;
{$EXTERNALSYM INADDR_LOOPBACK}
INADDR_BROADCAST = u_long($ffffffff);
{$EXTERNALSYM INADDR_BROADCAST}
INADDR_NONE = DWORD($ffffffff);
{$EXTERNALSYM INADDR_NONE}
(*
* Socket address, internet style.
*)
type
sockaddr_in = record
sin_family: Smallint;
sin_port: u_short;
sin_addr: in_addr;
sin_zero: array [0..7] of Char;
end;
{$EXTERNALSYM sockaddr_in}
TSockAddrIn = sockaddr_in;
PSockAddrIn = ^sockaddr_in;
const
WSADESCRIPTION_LEN = 256;
{$EXTERNALSYM WSADESCRIPTION_LEN}
WSASYS_STATUS_LEN = 128;
{$EXTERNALSYM WSASYS_STATUS_LEN}
type
WSAData = record
wVersion: WORD;
wHighVersion: WORD;
szDescription: array [0..WSADESCRIPTION_LEN] of Char;
szSystemStatus: array [0..WSASYS_STATUS_LEN] of Char;
iMaxSockets: Word;
iMaxUdpDg: Word;
lpVendorInfo: PChar;
end;
{$EXTERNALSYM WSAData}
LPWSADATA = ^WSAData;
{$EXTERNALSYM LPWSADATA}
TWsaData = WSAData;
PWsaData = LPWSADATA;
(*
* Options for use with [gs]etsockopt at the IP level.
*)
const
IP_OPTIONS = 1; (* set/get IP per-packet options *)
{$EXTERNALSYM IP_OPTIONS}
IP_MULTICAST_IF = 2; (* set/get IP multicast interface *)
{$EXTERNALSYM IP_MULTICAST_IF}
IP_MULTICAST_TTL = 3; (* set/get IP multicast timetolive *)
{$EXTERNALSYM IP_MULTICAST_TTL}
IP_MULTICAST_LOOP = 4; (* set/get IP multicast loopback *)
{$EXTERNALSYM IP_MULTICAST_LOOP}
IP_ADD_MEMBERSHIP = 5; (* add an IP group membership *)
{$EXTERNALSYM IP_ADD_MEMBERSHIP}
IP_DROP_MEMBERSHIP = 6; (* drop an IP group membership *)
{$EXTERNALSYM IP_DROP_MEMBERSHIP}
IP_TTL = 7; (* set/get IP Time To Live *)
{$EXTERNALSYM IP_TTL}
IP_TOS = 8; (* set/get IP Type Of Service *)
{$EXTERNALSYM IP_TOS}
IP_DONTFRAGMENT = 9; (* set/get IP Don't Fragment flag *)
{$EXTERNALSYM IP_DONTFRAGMENT}
IP_DEFAULT_MULTICAST_TTL = 1; (* normally limit m'casts to 1 hop *)
{$EXTERNALSYM IP_DEFAULT_MULTICAST_TTL}
IP_DEFAULT_MULTICAST_LOOP = 1; (* normally hear sends if a member *)
{$EXTERNALSYM IP_DEFAULT_MULTICAST_LOOP}
IP_MAX_MEMBERSHIPS = 20; (* per socket; must fit in one mbuf *)
{$EXTERNALSYM IP_MAX_MEMBERSHIPS}
(*
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
*)
type
ip_mreq = record
imr_multiaddr: in_addr; (* IP multicast address of group *)
imr_interface: in_addr; (* local IP address of interface *)
end;
{$EXTERNALSYM ip_mreq}
TIpMReq = ip_mreq;
PIpMReq = ^ip_mreq;
(*
* Definitions related to sockets: types, address families, options,
* taken from the BSD file sys/socket.h.
*)
(*
* This is used instead of -1, since the
* SOCKET type is unsigned.
*)
const
INVALID_SOCKET = TSocket(not 0);
{$EXTERNALSYM INVALID_SOCKET}
SOCKET_ERROR = -1;
{$EXTERNALSYM SOCKET_ERROR}
(*
* Types
*)
SOCK_STREAM = 1; // stream socket
{$EXTERNALSYM SOCK_STREAM}
SOCK_DGRAM = 2; // datagram socket
{$EXTERNALSYM SOCK_DGRAM}
SOCK_RAW = 3; // raw-protocol interface
{$EXTERNALSYM SOCK_RAW}
SOCK_RDM = 4; // reliably-delivered message
{$EXTERNALSYM SOCK_RDM}
SOCK_SEQPACKET = 5; // sequenced packet stream
{$EXTERNALSYM SOCK_SEQPACKET}
(*
* Option flags per-socket.
*)
SO_DEBUG = $0001; // turn on debugging info recording
{$EXTERNALSYM SO_DEBUG}
SO_ACCEPTCONN = $0002; // socket has had listen()
{$EXTERNALSYM SO_ACCEPTCONN}
SO_REUSEADDR = $0004; // allow local address reuse
{$EXTERNALSYM SO_REUSEADDR}
SO_KEEPALIVE = $0008; // keep connections alive
{$EXTERNALSYM SO_KEEPALIVE}
SO_DONTROUTE = $0010; // just use interface addresses
{$EXTERNALSYM SO_DONTROUTE}
SO_BROADCAST = $0020; // permit sending of broadcast msgs
{$EXTERNALSYM SO_BROADCAST}
SO_USELOOPBACK = $0040; // bypass hardware when possible
{$EXTERNALSYM SO_USELOOPBACK}
SO_LINGER = $0080; // linger on close if data present
{$EXTERNALSYM SO_LINGER}
SO_OOBINLINE = $0100; // leave received OOB data in line
{$EXTERNALSYM SO_OOBINLINE}
SO_DONTLINGER = DWORD(not SO_LINGER);
{$EXTERNALSYM SO_DONTLINGER}
(*
* Additional options.
*)
SO_SNDBUF = $1001; // send buffer size
{$EXTERNALSYM SO_SNDBUF}
SO_RCVBUF = $1002; // receive buffer size
{$EXTERNALSYM SO_RCVBUF}
SO_SNDLOWAT = $1003; // send low-water mark
{$EXTERNALSYM SO_SNDLOWAT}
SO_RCVLOWAT = $1004; // receive low-water mark
{$EXTERNALSYM SO_RCVLOWAT}
SO_SNDTIMEO = $1005; // send timeout
{$EXTERNALSYM SO_SNDTIMEO}
SO_RCVTIMEO = $1006; // receive timeout
{$EXTERNALSYM SO_RCVTIMEO}
SO_ERROR = $1007; // get error status and clear
{$EXTERNALSYM SO_ERROR}
SO_TYPE = $1008; // get socket type
{$EXTERNALSYM SO_TYPE}
(*
* Options for connect and disconnect data and options. Used only by
* non-TCP/IP transports such as DECNet, OSI TP4, etc.
*)
SO_CONNDATA = $7000;
{$EXTERNALSYM SO_CONNDATA}
SO_CONNOPT = $7001;
{$EXTERNALSYM SO_CONNOPT}
SO_DISCDATA = $7002;
{$EXTERNALSYM SO_DISCDATA}
SO_DISCOPT = $7003;
{$EXTERNALSYM SO_DISCOPT}
SO_CONNDATALEN = $7004;
{$EXTERNALSYM SO_CONNDATALEN}
SO_CONNOPTLEN = $7005;
{$EXTERNALSYM SO_CONNOPTLEN}
SO_DISCDATALEN = $7006;
{$EXTERNALSYM SO_DISCDATALEN}
SO_DISCOPTLEN = $7007;
{$EXTERNALSYM SO_DISCOPTLEN}
(*
* Option for opening sockets for synchronous access.
*)
SO_OPENTYPE = $7008;
{$EXTERNALSYM SO_OPENTYPE}
SO_SYNCHRONOUS_ALERT = $10;
{$EXTERNALSYM SO_SYNCHRONOUS_ALERT}
SO_SYNCHRONOUS_NONALERT = $20;
{$EXTERNALSYM SO_SYNCHRONOUS_NONALERT}
(*
* Other NT-specific options.
*)
SO_MAXDG = $7009;
{$EXTERNALSYM SO_MAXDG}
SO_MAXPATHDG = $700A;
{$EXTERNALSYM SO_MAXPATHDG}
SO_UPDATE_ACCEPT_CONTEXT = $700B;
{$EXTERNALSYM SO_UPDATE_ACCEPT_CONTEXT}
SO_CONNECT_TIME = $700C;
{$EXTERNALSYM SO_CONNECT_TIME}
(*
* TCP options.
*)
TCP_NODELAY = $0001;
{$EXTERNALSYM TCP_NODELAY}
TCP_BSDURGENT = $7000;
{$EXTERNALSYM TCP_BSDURGENT}
(*
* Address families.
*)
AF_UNSPEC = 0; // unspecified
{$EXTERNALSYM AF_UNSPEC}
AF_UNIX = 1; // local to host (pipes, portals
{$EXTERNALSYM AF_UNIX}
AF_INET = 2; // internetwork: UDP, TCP, etc.
{$EXTERNALSYM AF_INET}
AF_IMPLINK = 3; // arpanet imp addresses
{$EXTERNALSYM AF_IMPLINK}
AF_PUP = 4; // pup protocols: e.g. BSP
{$EXTERNALSYM AF_PUP}
AF_CHAOS = 5; // mit CHAOS protocols
{$EXTERNALSYM AF_CHAOS}
AF_NS = 6; // XEROX NS protocols
{$EXTERNALSYM AF_NS}
AF_IPX = AF_NS; // IPX protocols: IPX, SPX, etc.
{$EXTERNALSYM AF_IPX}
AF_ISO = 7; // ISO protocols
{$EXTERNALSYM AF_ISO}
AF_OSI = AF_ISO; // OSI is ISO
{$EXTERNALSYM AF_OSI}
AF_ECMA = 8; // european computer manufacturers
{$EXTERNALSYM AF_ECMA}
AF_DATAKIT = 9; // datakit protocols
{$EXTERNALSYM AF_DATAKIT}
AF_CCITT = 10; // CCITT protocols, X.25 etc
{$EXTERNALSYM AF_CCITT}
AF_SNA = 11; // IBM SNA
{$EXTERNALSYM AF_SNA}
AF_DECnet = 12; // DECnet
{$EXTERNALSYM AF_DECnet}
AF_DLI = 13; // Direct data link interface
{$EXTERNALSYM AF_DLI}
AF_LAT = 14; // LAT
{$EXTERNALSYM AF_LAT}
AF_HYLINK = 15; // NSC Hyperchannel
{$EXTERNALSYM AF_HYLINK}
AF_APPLETALK = 16; // AppleTalk
{$EXTERNALSYM AF_APPLETALK}
AF_NETBIOS = 17; // NetBios-style addresses
{$EXTERNALSYM AF_NETBIOS}
AF_VOICEVIEW = 18; // VoiceView
{$EXTERNALSYM AF_VOICEVIEW}
AF_FIREFOX = 19; // Protocols from Firefox
{$EXTERNALSYM AF_FIREFOX}
AF_UNKNOWN1 = 20; // Somebody is using this!
{$EXTERNALSYM AF_UNKNOWN1}
AF_BAN = 21; // Banyan
{$EXTERNALSYM AF_BAN}
AF_MAX = 22;
{$EXTERNALSYM AF_MAX}
(*
* Structure used by kernel to store most
* addresses.
*)
type
sockaddr = record
sa_family: u_short; // address family
sa_data: array [0..13] of Char; // up to 14 bytes of direct address
end;
{$EXTERNALSYM sockaddr}
TSockAddr = sockaddr;
PSockAddr = ^sockaddr;
(*
* Structure used by kernel to pass protocol
* information in raw sockets.
*)
sockproto = record
sp_family: u_short; // address family
sp_protocol: u_short; // protocol
end;
{$EXTERNALSYM sockproto}
TSockProto = sockproto;
PSockProto = ^sockproto;
(*
* Protocol families, same as address families for now.
*)
const
PF_UNSPEC = AF_UNSPEC;
{$EXTERNALSYM PF_UNSPEC}
PF_UNIX = AF_UNIX;
{$EXTERNALSYM PF_UNIX}
PF_INET = AF_INET;
{$EXTERNALSYM PF_INET}
PF_IMPLINK = AF_IMPLINK;
{$EXTERNALSYM PF_IMPLINK}
PF_PUP = AF_PUP;
{$EXTERNALSYM PF_PUP}
PF_CHAOS = AF_CHAOS;
{$EXTERNALSYM PF_CHAOS}
PF_NS = AF_NS;
{$EXTERNALSYM PF_NS}
PF_IPX = AF_IPX;
{$EXTERNALSYM PF_IPX}
PF_ISO = AF_ISO;
{$EXTERNALSYM PF_ISO}
PF_OSI = AF_OSI;
{$EXTERNALSYM PF_OSI}
PF_ECMA = AF_ECMA;
{$EXTERNALSYM PF_ECMA}
PF_DATAKIT = AF_DATAKIT;
{$EXTERNALSYM PF_DATAKIT}
PF_CCITT = AF_CCITT;
{$EXTERNALSYM PF_CCITT}
PF_SNA = AF_SNA;
{$EXTERNALSYM PF_SNA}
PF_DECnet = AF_DECnet;
{$EXTERNALSYM PF_DECnet}
PF_DLI = AF_DLI;
{$EXTERNALSYM PF_DLI}
PF_LAT = AF_LAT;
{$EXTERNALSYM PF_LAT}
PF_HYLINK = AF_HYLINK;
{$EXTERNALSYM PF_HYLINK}
PF_APPLETALK = AF_APPLETALK;
{$EXTERNALSYM PF_APPLETALK}
PF_VOICEVIEW = AF_VOICEVIEW;
{$EXTERNALSYM PF_VOICEVIEW}
PF_FIREFOX = AF_FIREFOX;
{$EXTERNALSYM PF_FIREFOX}
PF_UNKNOWN1 = AF_UNKNOWN1;
{$EXTERNALSYM PF_UNKNOWN1}
PF_BAN = AF_BAN;
{$EXTERNALSYM PF_BAN}
PF_MAX = AF_MAX;
{$EXTERNALSYM PF_MAX}
(*
* Structure used for manipulating linger option.
*)
type
linger = record
l_onoff: u_short; // option on/off
l_linger: u_short; // linger time
end;
{$EXTERNALSYM linger}
TLinger = linger;
PLinger = ^linger;
(*
* Level number for (get/set)sockopt() to apply to socket itself.
*)
const
SOL_SOCKET = $ffff; // options for socket level
{$EXTERNALSYM SOL_SOCKET}
(*
* Maximum queue length specifiable by listen.
*)
SOMAXCONN = $7fffffff;
{$EXTERNALSYM SOMAXCONN}
MSG_OOB = $1; // process out-of-band data
{$EXTERNALSYM MSG_OOB}
MSG_PEEK = $2; // peek at incoming message
{$EXTERNALSYM MSG_PEEK}
MSG_DONTROUTE = $4; // send without using routing tables
{$EXTERNALSYM MSG_DONTROUTE}
MSG_MAXIOVLEN = 16;
{$EXTERNALSYM MSG_MAXIOVLEN}
MSG_PARTIAL = $8000; // partial send or recv for message xport
{$EXTERNALSYM MSG_PARTIAL}
(*
* Define constant based on rfc883, used by gethostbyxxxx() calls.
*)
MAXGETHOSTSTRUCT = 1024;
{$EXTERNALSYM MAXGETHOSTSTRUCT}
(*
* Define flags to be used with the WSAAsyncSelect() call.
*)
FD_READ = $01;
{$EXTERNALSYM FD_READ}
FD_WRITE = $02;
{$EXTERNALSYM FD_WRITE}
FD_OOB = $04;
{$EXTERNALSYM FD_OOB}
FD_ACCEPT = $08;
{$EXTERNALSYM FD_ACCEPT}
FD_CONNECT = $10;
{$EXTERNALSYM FD_CONNECT}
FD_CLOSE = $20;
{$EXTERNALSYM FD_CLOSE}
{$IFNDEF JWA_INCLUDEMODE}
(*
* All Windows Sockets error constants are biased by WSABASEERR from
* the "normal"
*)
WSABASEERR = 10000;
{$EXTERNALSYM WSABASEERR}
{$ENDIF JWA_INCLUDEMODE}
{$IFNDEF JWA_INCLUDEMODE}
(*
* Windows Sockets definitions of regular Microsoft C error constants
*)
WSAEINTR = WSABASEERR + 4;
{$EXTERNALSYM WSAEINTR}
WSAEBADF = WSABASEERR + 9;
{$EXTERNALSYM WSAEBADF}
WSAEACCES = WSABASEERR + 13;
{$EXTERNALSYM WSAEACCES}
WSAEFAULT = WSABASEERR + 14;
{$EXTERNALSYM WSAEFAULT}
WSAEINVAL = WSABASEERR + 22;
{$EXTERNALSYM WSAEINVAL}
WSAEMFILE = WSABASEERR + 24;
{$EXTERNALSYM WSAEMFILE}
(*
* Windows Sockets definitions of regular Berkeley error constants
*)
WSAEWOULDBLOCK = WSABASEERR + 35;
{$EXTERNALSYM WSAEWOULDBLOCK}
WSAEINPROGRESS = WSABASEERR + 36;
{$EXTERNALSYM WSAEINPROGRESS}
WSAEALREADY = WSABASEERR + 37;
{$EXTERNALSYM WSAEALREADY}
WSAENOTSOCK = WSABASEERR + 38;
{$EXTERNALSYM WSAENOTSOCK}
WSAEDESTADDRREQ = WSABASEERR + 39;
{$EXTERNALSYM WSAEDESTADDRREQ}
WSAEMSGSIZE = WSABASEERR + 40;
{$EXTERNALSYM WSAEMSGSIZE}
WSAEPROTOTYPE = WSABASEERR + 41;
{$EXTERNALSYM WSAEPROTOTYPE}
WSAENOPROTOOPT = WSABASEERR + 42;
{$EXTERNALSYM WSAENOPROTOOPT}
WSAEPROTONOSUPPORT = WSABASEERR + 43;
{$EXTERNALSYM WSAEPROTONOSUPPORT}
WSAESOCKTNOSUPPORT = WSABASEERR + 44;
{$EXTERNALSYM WSAESOCKTNOSUPPORT}
WSAEOPNOTSUPP = WSABASEERR + 45;
{$EXTERNALSYM WSAEOPNOTSUPP}
WSAEPFNOSUPPORT = WSABASEERR + 46;
{$EXTERNALSYM WSAEPFNOSUPPORT}
WSAEAFNOSUPPORT = WSABASEERR + 47;
{$EXTERNALSYM WSAEAFNOSUPPORT}
WSAEADDRINUSE = WSABASEERR + 48;
{$EXTERNALSYM WSAEADDRINUSE}
WSAEADDRNOTAVAIL = WSABASEERR + 49;
{$EXTERNALSYM WSAEADDRNOTAVAIL}
WSAENETDOWN = WSABASEERR + 50;
{$EXTERNALSYM WSAENETDOWN}
WSAENETUNREACH = WSABASEERR + 51;
{$EXTERNALSYM WSAENETUNREACH}
WSAENETRESET = WSABASEERR + 52;
{$EXTERNALSYM WSAENETRESET}
WSAECONNABORTED = WSABASEERR + 53;
{$EXTERNALSYM WSAECONNABORTED}
WSAECONNRESET = WSABASEERR + 54;
{$EXTERNALSYM WSAECONNRESET}
WSAENOBUFS = WSABASEERR + 55;
{$EXTERNALSYM WSAENOBUFS}
WSAEISCONN = WSABASEERR + 56;
{$EXTERNALSYM WSAEISCONN}
WSAENOTCONN = WSABASEERR + 57;
{$EXTERNALSYM WSAENOTCONN}
WSAESHUTDOWN = WSABASEERR + 58;
{$EXTERNALSYM WSAESHUTDOWN}
WSAETOOMANYREFS = WSABASEERR + 59;
{$EXTERNALSYM WSAETOOMANYREFS}
WSAETIMEDOUT = WSABASEERR + 60;
{$EXTERNALSYM WSAETIMEDOUT}
WSAECONNREFUSED = WSABASEERR + 61;
{$EXTERNALSYM WSAECONNREFUSED}
WSAELOOP = WSABASEERR + 62;
{$EXTERNALSYM WSAELOOP}
WSAENAMETOOLONG = WSABASEERR + 63;
{$EXTERNALSYM WSAENAMETOOLONG}
WSAEHOSTDOWN = WSABASEERR + 64;
{$EXTERNALSYM WSAEHOSTDOWN}
WSAEHOSTUNREACH = WSABASEERR + 65;
{$EXTERNALSYM WSAEHOSTUNREACH}
WSAENOTEMPTY = WSABASEERR + 66;
{$EXTERNALSYM WSAENOTEMPTY}
WSAEPROCLIM = WSABASEERR + 67;
{$EXTERNALSYM WSAEPROCLIM}
WSAEUSERS = WSABASEERR + 68;
{$EXTERNALSYM WSAEUSERS}
WSAEDQUOT = WSABASEERR + 69;
{$EXTERNALSYM WSAEDQUOT}
WSAESTALE = WSABASEERR + 70;
{$EXTERNALSYM WSAESTALE}
WSAEREMOTE = WSABASEERR + 71;
{$EXTERNALSYM WSAEREMOTE}
WSAEDISCON = WSABASEERR + 101;
{$EXTERNALSYM WSAEDISCON}
(*
* Extended Windows Sockets error constant definitions
*)
WSASYSNOTREADY = WSABASEERR + 91;
{$EXTERNALSYM WSASYSNOTREADY}
WSAVERNOTSUPPORTED = WSABASEERR + 92;
{$EXTERNALSYM WSAVERNOTSUPPORTED}
WSANOTINITIALISED = WSABASEERR + 93;
{$EXTERNALSYM WSANOTINITIALISED}
(*
* Error return codes from gethostbyname() and gethostbyaddr()
* (when using the resolver). Note that these errors are
* retrieved via WSAGetLastError() and must therefore follow
* the rules for avoiding clashes with error numbers from
* specific implementations or language run-time systems.
* For this reason the codes are based at WSABASEERR+1001.
* Note also that [WSA]NO_ADDRESS is defined only for
* compatibility purposes.
*)
// Authoritative Answer: Host not found
WSAHOST_NOT_FOUND = WSABASEERR + 1001;
{$EXTERNALSYM WSAHOST_NOT_FOUND}
// Non-Authoritative: Host not found, or SERVERFAIL
WSATRY_AGAIN = WSABASEERR + 1002;
{$EXTERNALSYM WSATRY_AGAIN}
// Non-recoverable errors, FORMERR, REFUSED, NOTIMP
WSANO_RECOVERY = WSABASEERR + 1003;
{$EXTERNALSYM WSANO_RECOVERY}
// Valid name, no data record of requested type
WSANO_DATA = WSABASEERR + 1004;
{$EXTERNALSYM WSANO_DATA}
{$ENDIF JWA_INCLUDEMODE}
(*
* Compatibility macros.
*)
function h_errno: Integer;
{$EXTERNALSYM h_errno}
const
HOST_NOT_FOUND = WSAHOST_NOT_FOUND;
{$EXTERNALSYM HOST_NOT_FOUND}
TRY_AGAIN = WSATRY_AGAIN;
{$EXTERNALSYM TRY_AGAIN}
NO_RECOVERY = WSANO_RECOVERY;
{$EXTERNALSYM NO_RECOVERY}
NO_DATA = WSANO_DATA;
{$EXTERNALSYM NO_DATA}
// no address, look for MX record
WSANO_ADDRESS = WSANO_DATA;
{$EXTERNALSYM WSANO_ADDRESS}
NO_ADDRESS = WSANO_ADDRESS;
{$EXTERNALSYM NO_ADDRESS}
(*
* Windows Sockets errors redefined as regular Berkeley error constants.
* These are commented out in Windows NT to avoid conflicts with errno.h.
* Use the WSA constants instead.
*)
{$IFDEF FALSE}
const
EWOULDBLOCK = WSAEWOULDBLOCK;
{$EXTERNALSYM EWOULDBLOCK}
EINPROGRESS = WSAEINPROGRESS;
{$EXTERNALSYM EINPROGRESS}
EALREADY = WSAEALREADY;
{$EXTERNALSYM EALREADY}
ENOTSOCK = WSAENOTSOCK;
{$EXTERNALSYM ENOTSOCK}
EDESTADDRREQ = WSAEDESTADDRREQ;
{$EXTERNALSYM EDESTADDRREQ}
EMSGSIZE = WSAEMSGSIZE;
{$EXTERNALSYM EMSGSIZE}
EPROTOTYPE = WSAEPROTOTYPE;
{$EXTERNALSYM EPROTOTYPE}
ENOPROTOOPT = WSAENOPROTOOPT;
{$EXTERNALSYM ENOPROTOOPT}
EPROTONOSUPPORT = WSAEPROTONOSUPPORT;
{$EXTERNALSYM EPROTONOSUPPORT}
ESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT;
{$EXTERNALSYM ESOCKTNOSUPPORT}
EOPNOTSUPP = WSAEOPNOTSUPP;
{$EXTERNALSYM EOPNOTSUPP}
EPFNOSUPPORT = WSAEPFNOSUPPORT;
{$EXTERNALSYM EPFNOSUPPORT}
EAFNOSUPPORT = WSAEAFNOSUPPORT;
{$EXTERNALSYM EAFNOSUPPORT}
EADDRINUSE = WSAEADDRINUSE;
{$EXTERNALSYM EADDRINUSE}
EADDRNOTAVAIL = WSAEADDRNOTAVAIL;
{$EXTERNALSYM EADDRNOTAVAIL}
ENETDOWN = WSAENETDOWN;
{$EXTERNALSYM ENETDOWN}
ENETUNREACH = WSAENETUNREACH;
{$EXTERNALSYM ENETUNREACH}
ENETRESET = WSAENETRESET;
{$EXTERNALSYM ENETRESET}
ECONNABORTED = WSAECONNABORTED;
{$EXTERNALSYM ECONNABORTED}
ECONNRESET = WSAECONNRESET;
{$EXTERNALSYM ECONNRESET}
ENOBUFS = WSAENOBUFS;
{$EXTERNALSYM ENOBUFS}
EISCONN = WSAEISCONN;
{$EXTERNALSYM EISCONN}
ENOTCONN = WSAENOTCONN;
{$EXTERNALSYM ENOTCONN}
ESHUTDOWN = WSAESHUTDOWN;
{$EXTERNALSYM ESHUTDOWN}
ETOOMANYREFS = WSAETOOMANYREFS;
{$EXTERNALSYM ETOOMANYREFS}
ETIMEDOUT = WSAETIMEDOUT;
{$EXTERNALSYM ETIMEDOUT}
ECONNREFUSED = WSAECONNREFUSED;
{$EXTERNALSYM ECONNREFUSED}
ELOOP = WSAELOOP;
{$EXTERNALSYM ELOOP}
ENAMETOOLONG = WSAENAMETOOLONG;
{$EXTERNALSYM ENAMETOOLONG}
EHOSTDOWN = WSAEHOSTDOWN;
{$EXTERNALSYM EHOSTDOWN}
EHOSTUNREACH = WSAEHOSTUNREACH;
{$EXTERNALSYM EHOSTUNREACH}
ENOTEMPTY = WSAENOTEMPTY;
{$EXTERNALSYM ENOTEMPTY}
EPROCLIM = WSAEPROCLIM;
{$EXTERNALSYM EPROCLIM}
EUSERS = WSAEUSERS;
{$EXTERNALSYM EUSERS}
EDQUOT = WSAEDQUOT;
{$EXTERNALSYM EDQUOT}
ESTALE = WSAESTALE;
{$EXTERNALSYM ESTALE}
EREMOTE = WSAEREMOTE;
{$EXTERNALSYM EREMOTE}
{$ENDIF FALSE}
(* Socket function prototypes *)
function accept(s: TSocket; addr: PSockAddr; addrlen: PINT): TSocket; stdcall;
{$EXTERNALSYM accept}
function bind(s: TSocket; name: PSockAddr; namelen: Integer): Integer; stdcall;
{$EXTERNALSYM bind}
function closesocket(s: TSocket): Integer; stdcall;
{$EXTERNALSYM closesocket}
function connect(s: TSocket; name: PSockAddr; namelen: Integer): Integer; stdcall;
{$EXTERNALSYM connect}
function ioctlsocket(s: TSocket; cmd: Longint; var argp: u_long): Integer; stdcall;
{$EXTERNALSYM ioctlsocket}
function getpeername(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall;
{$EXTERNALSYM getpeername}
function getsockname(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall;
{$EXTERNALSYM getsockname}
function getsockopt(s: TSocket; level, optname: Integer; optval: PChar; var optlen: Integer): Integer; stdcall;
{$EXTERNALSYM getsockopt}
function htonl(hostlong: u_long): u_long; stdcall;
{$EXTERNALSYM htonl}
function htons(hostshort: u_short): u_short; stdcall;
{$EXTERNALSYM htons}
function inet_addr(cp: PChar): u_long; stdcall;
{$EXTERNALSYM inet_addr}
function inet_ntoa(inaddr: in_addr): PChar; stdcall;
{$EXTERNALSYM inet_ntoa}
function listen(s: TSocket; backlog: Integer): Integer; stdcall;
{$EXTERNALSYM listen}
function ntohl(netlong: u_long): u_long; stdcall;
{$EXTERNALSYM ntohl}
function ntohs(netshort: u_short): u_short; stdcall;
{$EXTERNALSYM ntohs}
function recv(s: TSocket; var buf; len, flags: Integer): Integer; stdcall;
{$EXTERNALSYM recv}
function recvfrom(s: TSocket; var buf; len, flags: Integer; from: PSockAddr; var fromlen: Integer): Integer; stdcall;
{$EXTERNALSYM recvfrom}
function select(nfds: Integer; readfds, writefds, exceptfds: PFdSet; timeout: PTimeVal): Integer; stdcall;
{$EXTERNALSYM select}
function send(s: TSocket; var buf; len, flags: Integer): Integer; stdcall;
{$EXTERNALSYM send}
function sendto(s: TSocket; var buf; len, flags: Integer; toaddr: PSockAddr; tolen: Integer): Integer; stdcall;
{$EXTERNALSYM sendto}
function setsockopt(s: TSocket; level, optname: Integer; optval: PChar; optlen: Integer): Integer; stdcall;
{$EXTERNALSYM setsockopt}
function shutdown(s: TSocket; how: Integer): Integer; stdcall;
{$EXTERNALSYM shutdown}
function socket(af, type_, protocol: Integer): TSocket; stdcall;
{$EXTERNALSYM socket}
(* Database function prototypes *)
function gethostbyaddr(addr: PChar; len, type_: Integer): PHostEnt; stdcall;
{$EXTERNALSYM gethostbyaddr}
function gethostbyname(name: PChar): PHostEnt; stdcall;
{$EXTERNALSYM gethostbyname}
function gethostname(name: PChar; namelen: Integer): Integer; stdcall;
{$EXTERNALSYM gethostname}
function getservbyport(port: Integer; proto: PChar): PServEnt; stdcall;
{$EXTERNALSYM getservbyport}
function getservbyname(name, proto: PChar): PServEnt; stdcall;
{$EXTERNALSYM getservbyname}
function getprotobynumber(number: Integer): PProtoEnt; stdcall;
{$EXTERNALSYM getprotobynumber}
function getprotobyname(name: PChar): PProtoEnt; stdcall;
{$EXTERNALSYM getprotobyname}
(* Microsoft Windows Extension function prototypes *)
function WSAStartup(wVersionRequired: WORD; var lpWSAData: TWSAData): Integer; stdcall;
{$EXTERNALSYM WSAStartup}
function WSACleanup: Integer; stdcall;
{$EXTERNALSYM WSACleanup}
procedure WSASetLastError(iError: Integer); stdcall;
{$EXTERNALSYM WSASetLastError}
function WSAGetLastError: Integer; stdcall;
{$EXTERNALSYM WSAGetLastError}
function WSAIsBlocking: BOOL; stdcall;
{$EXTERNALSYM WSAIsBlocking}
function WSAUnhookBlockingHook: Integer; stdcall;
{$EXTERNALSYM WSAUnhookBlockingHook}
function WSASetBlockingHook(lpBlockFunc: FARPROC): FARPROC; stdcall;
{$EXTERNALSYM WSASetBlockingHook}
function WSACancelBlockingCall: Integer; stdcall;
{$EXTERNALSYM WSACancelBlockingCall}
function WSAAsyncGetServByName(hWnd: HWND; wMsg: u_int; name, proto, buf: PChar;
buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetServByName}
function WSAAsyncGetServByPort(hWnd: HWND; wMsg: u_int; port: Integer;
proto, buf: PChar; buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetServByPort}
function WSAAsyncGetProtoByName(hWnd: HWND; wMsg: u_int; name, buf: PChar;
buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetProtoByName}
function WSAAsyncGetProtoByNumber(hWnd: HWND; wMsg: u_int; number: Integer;
buf: PChar; buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetProtoByNumber}
function WSAAsyncGetHostByName(hWnd: HWND; wMsg: u_int; name, buf: PChar;
buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetHostByName}
function WSAAsyncGetHostByAddr(hWnd: HWND; wMsg: u_int; addr: PChar;
len, type_: Integer; buf: PChar; buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetHostByAddr}
function WSACancelAsyncRequest(hAsyncTaskHandle: HANDLE): Integer; stdcall;
{$EXTERNALSYM WSACancelAsyncRequest}
function WSAAsyncSelect(s: TSocket; hWnd: HWND; wMsg: u_int; lEvent: Longint): Integer; stdcall;
{$EXTERNALSYM WSAAsyncSelect}
function WSARecvEx(s: TSocket; var buf; len: Integer; var flags: Integer): Integer; stdcall;
{$EXTERNALSYM WSARecvEx}
type
_TRANSMIT_FILE_BUFFERS = record
Head: LPVOID;
HeadLength: DWORD;
Tail: LPVOID;
TailLength: DWORD;
end;
{$EXTERNALSYM _TRANSMIT_FILE_BUFFERS}
TRANSMIT_FILE_BUFFERS = _TRANSMIT_FILE_BUFFERS;
{$EXTERNALSYM TRANSMIT_FILE_BUFFERS}
PTRANSMIT_FILE_BUFFERS = ^TRANSMIT_FILE_BUFFERS;
{$EXTERNALSYM PTRANSMIT_FILE_BUFFERS}
LPTRANSMIT_FILE_BUFFERS = ^TRANSMIT_FILE_BUFFERS;
{$EXTERNALSYM LPTRANSMIT_FILE_BUFFERS}
TTransmitFileBuffers = TRANSMIT_FILE_BUFFERS;
PTransmitFileBuffers = LPTRANSMIT_FILE_BUFFERS;
const
TF_DISCONNECT = $01;
{$EXTERNALSYM TF_DISCONNECT}
TF_REUSE_SOCKET = $02;
{$EXTERNALSYM TF_REUSE_SOCKET}
TF_WRITE_BEHIND = $04;
{$EXTERNALSYM TF_WRITE_BEHIND}
function TransmitFile(hSocket: TSocket; hFile: HANDLE; nNumberOfBytesToWrite: DWORD;
nNumberOfBytesPerSend: DWORD; lpOverlapped: LPOVERLAPPED;
lpTransmitBuffers: LPTRANSMIT_FILE_BUFFERS; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM TransmitFile}
function AcceptEx(sListenSocket, sAcceptSocket: TSocket;
lpOutputBuffer: LPVOID; dwReceiveDataLength, dwLocalAddressLength,
dwRemoteAddressLength: DWORD; var lpdwBytesReceived: DWORD;
lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM AcceptEx}
procedure GetAcceptExSockaddrs(lpOutputBuffer: Pointer;
dwReceiveDataLength, dwLocalAddressLength, dwRemoteAddressLength: DWORD;
out LocalSockaddr: PSockAddr; var LocalSockaddrLength: Integer;
out RemoteSockaddr: PSockAddr; var RemoteSockaddrLength: Integer); stdcall;
{$EXTERNALSYM GetAcceptExSockaddrs}
(* Microsoft Windows Extended data types *)
type
PSOCKADDR_IN = ^sockaddr_in;
{$EXTERNALSYM PSOCKADDR_IN}
LPSOCKADDR_IN = ^sockaddr_in;
{$EXTERNALSYM LPSOCKADDR_IN}
LPLINGER = PLINGER;
{$EXTERNALSYM LPLINGER}
PIN_ADDR = ^in_addr;
{$EXTERNALSYM PIN_ADDR}
LPIN_ADDR = ^in_addr;
{$EXTERNALSYM LPIN_ADDR}
PFD_SET = ^fd_set;
{$EXTERNALSYM PFD_SET}
LPFD_SET = ^fd_set;
{$EXTERNALSYM LPFD_SET}
LPHOSTENT = PHOSTENT;
{$EXTERNALSYM LPHOSTENT}
LPSERVENT = PSERVENT;
{$EXTERNALSYM LPSERVENT}
LPPROTOENT = PPROTOENT;
{$EXTERNALSYM LPPROTOENT}
LPTIMEVAL = PTIMEVAL;
{$EXTERNALSYM LPTIMEVAL}
(*
* Windows message parameter composition and decomposition
* macros.
*
* WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
* when constructing the response to a WSAAsyncGetXByY() routine.
*)
function WSAMAKEASYNCREPLY(buflen, error: WORD): DWORD;
{$EXTERNALSYM WSAMAKEASYNCREPLY}
(*
* WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
* when constructing the response to WSAAsyncSelect().
*)
function WSAMAKESELECTREPLY(event, error: WORD): DWORD;
{$EXTERNALSYM WSAMAKESELECTREPLY}
(*
* WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
* to extract the buffer length from the lParam in the response
* to a WSAGetXByY().
*)
function WSAGETASYNCBUFLEN(lParam: DWORD): WORD;
{$EXTERNALSYM WSAGETASYNCBUFLEN}
(*
* WSAGETASYNCERROR is intended for use by the Windows Sockets application
* to extract the error code from the lParam in the response
* to a WSAGetXByY().
*)
function WSAGETASYNCERROR(lParam: DWORD): WORD;
{$EXTERNALSYM WSAGETASYNCERROR}
(*
* WSAGETSELECTEVENT is intended for use by the Windows Sockets application
* to extract the event code from the lParam in the response
* to a WSAAsyncSelect().
*)
function WSAGETSELECTEVENT(lParam: DWORD): WORD;
{$EXTERNALSYM WSAGETSELECTEVENT}
(*
* WSAGETSELECTERROR is intended for use by the Windows Sockets application
* to extract the error code from the lParam in the response
* to a WSAAsyncSelect().
*)
function WSAGETSELECTERROR(lParam: DWORD): WORD;
{$EXTERNALSYM WSAGETSELECTERROR}
{$ENDIF JWA_IMPLEMENTATIONSECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
implementation
//uses ...
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_INTERFACESECTION}
{$IFNDEF JWA_INCLUDEMODE}
const
wsock32 = 'wsock32.dll';
{$ENDIF JWA_INCLUDEMODE}
procedure FD_CLR(fd: TSocket; var fdset: TFdSet);
var
I: Cardinal;
begin
I := 0;
while I < fdset.fd_count do
begin
if fdset.fd_array[I] = fd then
begin
while I < fdset.fd_count - 1 do
begin
fdset.fd_array[I] := fdset.fd_array[I + 1];
Inc(I);
end;
fdset.fd_count := fdset.fd_count - 1;
Break;
end;
Inc(I);
end;
end;
procedure _FD_SET(fd: TSocket; var fdset: TFDSet);
var
I: Cardinal;
begin
I := 0;
while I < fdset.fd_count do
begin
if fdset.fd_array[I] = fd then
Break;
Inc(I);
end;
if I = fdset.fd_count then
begin
if fdset.fd_count < FD_SETSIZE then
begin
fdset.fd_array[I] := fd;
fdset.fd_count := fdset.fd_count + 1;
end;
end;
end;
procedure FD_ZERO(var fdset: TFdSet);
begin
fdset.fd_count := 0;
end;
function FD_ISSET(fd: TSocket; var fdset: TFdSet): Boolean;
begin
Result := __WSAFDIsSet(fd, fdset) <> 0;
end;
function timerisset(const tvp: TTimeVal): Boolean;
begin
Result := (tvp.tv_sec <> 0) or (tvp.tv_usec <> 0);
end;
procedure timerclear(var tvp: TTimeVal);
begin
tvp.tv_sec := 0;
tvp.tv_usec := 0;
end;
function _IO(x, y: DWORD): DWORD;
begin
Result := IOC_VOID or (x shl 8) or y;
end;
function _IOR(x, y, t: DWORD): DWORD;
begin
Result := IOC_OUT or ((T and IOCPARM_MASK) shl 16) or (x shl 8) or y;
end;
function _IOW(x, y, t: DWORD): DWORD;
begin
Result := DWORD(IOC_IN or ((T and IOCPARM_MASK) shl 16) or (x shl 8) or y);
end;
function IN_CLASSA(i: DWORD): Boolean;
begin
Result := i and DWORD($80000000) = 0;
end;
function IN_CLASSB(i: DWORD): Boolean;
begin
Result := i and DWORD($C0000000) = DWORD($80000000);
end;
function IN_CLASSC(i: DWORD): Boolean;
begin
Result := (i and DWORD($e0000000)) = DWORD($C0000000);
end;
function h_errno: Integer;
begin
Result := WSAGetLastError;
end;
function WSAMAKEASYNCREPLY(buflen, error: WORD): DWORD;
begin
Result := MAKELONG(buflen, error);
end;
function WSAMAKESELECTREPLY(event, error: WORD): DWORD;
begin
Result := MAKELONG(event, error);
end;
function WSAGETASYNCBUFLEN(lParam: DWORD): WORD;
begin
Result := LOWORD(lParam);
end;
function WSAGETASYNCERROR(lParam: DWORD): WORD;
begin
Result := HIWORD(lParam);
end;
function WSAGETSELECTEVENT(lParam: DWORD): WORD;
begin
Result := LOWORD(lParam);
end;
function WSAGETSELECTERROR(lParam: DWORD): WORD;
begin
Result := HIWORD(lParam);
end;
{$IFDEF DYNAMIC_LINK}
var
___WSAFDIsSet: Pointer;
function __WSAFDIsSet;
begin
GetProcedureAddress(___WSAFDIsSet, wsock32, '__WSAFDIsSet');
asm
MOV ESP, EBP
POP EBP
JMP [___WSAFDIsSet]
end;
end;
var
_accept: Pointer;
function accept;
begin
GetProcedureAddress(_accept, wsock32, 'accept');
asm
MOV ESP, EBP
POP EBP
JMP [_accept]
end;
end;
var
_bind: Pointer;
function bind;
begin
GetProcedureAddress(_bind, wsock32, 'bind');
asm
MOV ESP, EBP
POP EBP
JMP [_bind]
end;
end;
var
_closesocket: Pointer;
function closesocket;
begin
GetProcedureAddress(_closesocket, wsock32, 'closesocket');
asm
MOV ESP, EBP
POP EBP
JMP [_closesocket]
end;
end;
var
_connect: Pointer;
function connect;
begin
GetProcedureAddress(_connect, wsock32, 'connect');
asm
MOV ESP, EBP
POP EBP
JMP [_connect]
end;
end;
var
_ioctlsocket: Pointer;
function ioctlsocket;
begin
GetProcedureAddress(_ioctlsocket, wsock32, 'ioctlsocket');
asm
MOV ESP, EBP
POP EBP
JMP [_ioctlsocket]
end;
end;
var
_getpeername: Pointer;
function getpeername;
begin
GetProcedureAddress(_getpeername, wsock32, 'getpeername');
asm
MOV ESP, EBP
POP EBP
JMP [_getpeername]
end;
end;
var
_getsockname: Pointer;
function getsockname;
begin
GetProcedureAddress(_getsockname, wsock32, 'getsockname');
asm
MOV ESP, EBP
POP EBP
JMP [_getsockname]
end;
end;
var
_getsockopt: Pointer;
function getsockopt;
begin
GetProcedureAddress(_getsockopt, wsock32, 'getsockopt');
asm
MOV ESP, EBP
POP EBP
JMP [_getsockopt]
end;
end;
var
_htonl: Pointer;
function htonl;
begin
GetProcedureAddress(_htonl, wsock32, 'htonl');
asm
MOV ESP, EBP
POP EBP
JMP [_htonl]
end;
end;
var
_htons: Pointer;
function htons;
begin
GetProcedureAddress(_htons, wsock32, 'htons');
asm
MOV ESP, EBP
POP EBP
JMP [_htons]
end;
end;
var
_inet_addr: Pointer;
function inet_addr;
begin
GetProcedureAddress(_inet_addr, wsock32, 'inet_addr');
asm
MOV ESP, EBP
POP EBP
JMP [_inet_addr]
end;
end;
var
_inet_ntoa: Pointer;
function inet_ntoa;
begin
GetProcedureAddress(_inet_ntoa, wsock32, 'inet_ntoa');
asm
MOV ESP, EBP
POP EBP
JMP [_inet_ntoa]
end;
end;
var
_listen: Pointer;
function listen;
begin
GetProcedureAddress(_listen, wsock32, 'listen');
asm
MOV ESP, EBP
POP EBP
JMP [_listen]
end;
end;
var
_ntohl: Pointer;
function ntohl;
begin
GetProcedureAddress(_ntohl, wsock32, 'ntohl');
asm
MOV ESP, EBP
POP EBP
JMP [_ntohl]
end;
end;
var
_ntohs: Pointer;
function ntohs;
begin
GetProcedureAddress(_ntohs, wsock32, 'ntohs');
asm
MOV ESP, EBP
POP EBP
JMP [_ntohs]
end;
end;
var
_recv: Pointer;
function recv;
begin
GetProcedureAddress(_recv, wsock32, 'recv');
asm
MOV ESP, EBP
POP EBP
JMP [_recv]
end;
end;
var
_recvfrom: Pointer;
function recvfrom;
begin
GetProcedureAddress(_recvfrom, wsock32, 'recvfrom');
asm
MOV ESP, EBP
POP EBP
JMP [_recvfrom]
end;
end;
var
_select: Pointer;
function select;
begin
GetProcedureAddress(_select, wsock32, 'select');
asm
MOV ESP, EBP
POP EBP
JMP [_select]
end;
end;
var
_send: Pointer;
function send;
begin
GetProcedureAddress(_send, wsock32, 'send');
asm
MOV ESP, EBP
POP EBP
JMP [_send]
end;
end;
var
_sendto: Pointer;
function sendto;
begin
GetProcedureAddress(_sendto, wsock32, 'sendto');
asm
MOV ESP, EBP
POP EBP
JMP [_sendto]
end;
end;
var
_setsockopt: Pointer;
function setsockopt;
begin
GetProcedureAddress(_setsockopt, wsock32, 'setsockopt');
asm
MOV ESP, EBP
POP EBP
JMP [_setsockopt]
end;
end;
var
_shutdown: Pointer;
function shutdown;
begin
GetProcedureAddress(_shutdown, wsock32, 'shutdown');
asm
MOV ESP, EBP
POP EBP
JMP [_shutdown]
end;
end;
var
_socket: Pointer;
function socket;
begin
GetProcedureAddress(_socket, wsock32, 'socket');
asm
MOV ESP, EBP
POP EBP
JMP [_socket]
end;
end;
var
_gethostbyaddr: Pointer;
function gethostbyaddr;
begin
GetProcedureAddress(_gethostbyaddr, wsock32, 'gethostbyaddr');
asm
MOV ESP, EBP
POP EBP
JMP [_gethostbyaddr]
end;
end;
var
_gethostbyname: Pointer;
function gethostbyname;
begin
GetProcedureAddress(_gethostbyname, wsock32, 'gethostbyname');
asm
MOV ESP, EBP
POP EBP
JMP [_gethostbyname]
end;
end;
var
_gethostname: Pointer;
function gethostname;
begin
GetProcedureAddress(_gethostname, wsock32, 'gethostname');
asm
MOV ESP, EBP
POP EBP
JMP [_gethostname]
end;
end;
var
_getservbyport: Pointer;
function getservbyport;
begin
GetProcedureAddress(_getservbyport, wsock32, 'getservbyport');
asm
MOV ESP, EBP
POP EBP
JMP [_getservbyport]
end;
end;
var
_getservbyname: Pointer;
function getservbyname;
begin
GetProcedureAddress(_getservbyname, wsock32, 'getservbyname');
asm
MOV ESP, EBP
POP EBP
JMP [_getservbyname]
end;
end;
var
_getprotobynumber: Pointer;
function getprotobynumber;
begin
GetProcedureAddress(_getprotobynumber, wsock32, 'getprotobynumber');
asm
MOV ESP, EBP
POP EBP
JMP [_getprotobynumber]
end;
end;
var
_getprotobyname: Pointer;
function getprotobyname;
begin
GetProcedureAddress(_getprotobyname, wsock32, 'getprotobyname');
asm
MOV ESP, EBP
POP EBP
JMP [_getprotobyname]
end;
end;
var
_WSAStartup: Pointer;
function WSAStartup;
begin
GetProcedureAddress(_WSAStartup, wsock32, 'WSAStartup');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAStartup]
end;
end;
var
_WSACleanup: Pointer;
function WSACleanup;
begin
GetProcedureAddress(_WSACleanup, wsock32, 'WSACleanup');
asm
MOV ESP, EBP
POP EBP
JMP [_WSACleanup]
end;
end;
var
_WSASetLastError: Pointer;
procedure WSASetLastError;
begin
GetProcedureAddress(_WSASetLastError, wsock32, 'WSASetLastError');
asm
MOV ESP, EBP
POP EBP
JMP [_WSASetLastError]
end;
end;
var
_WSAGetLastError: Pointer;
function WSAGetLastError;
begin
GetProcedureAddress(_WSAGetLastError, wsock32, 'WSAGetLastError');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAGetLastError]
end;
end;
var
_WSAIsBlocking: Pointer;
function WSAIsBlocking;
begin
GetProcedureAddress(_WSAIsBlocking, wsock32, 'WSAIsBlocking');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAIsBlocking]
end;
end;
var
_WSAUnhookBlockingHook: Pointer;
function WSAUnhookBlockingHook;
begin
GetProcedureAddress(_WSAUnhookBlockingHook, wsock32, 'WSAUnhookBlockingHook');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAUnhookBlockingHook]
end;
end;
var
_WSASetBlockingHook: Pointer;
function WSASetBlockingHook;
begin
GetProcedureAddress(_WSASetBlockingHook, wsock32, 'WSASetBlockingHook');
asm
MOV ESP, EBP
POP EBP
JMP [_WSASetBlockingHook]
end;
end;
var
_WSACancelBlockingCall: Pointer;
function WSACancelBlockingCall;
begin
GetProcedureAddress(_WSACancelBlockingCall, wsock32, 'WSACancelBlockingCall');
asm
MOV ESP, EBP
POP EBP
JMP [_WSACancelBlockingCall]
end;
end;
var
_WSAAsyncGetServByName: Pointer;
function WSAAsyncGetServByName;
begin
GetProcedureAddress(_WSAAsyncGetServByName, wsock32, 'WSAAsyncGetServByName');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAAsyncGetServByName]
end;
end;
var
_WSAAsyncGetServByPort: Pointer;
function WSAAsyncGetServByPort;
begin
GetProcedureAddress(_WSAAsyncGetServByPort, wsock32, 'WSAAsyncGetServByPort');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAAsyncGetServByPort]
end;
end;
var
_WSAAsyncGetProtoByName: Pointer;
function WSAAsyncGetProtoByName;
begin
GetProcedureAddress(_WSAAsyncGetProtoByName, wsock32, 'WSAAsyncGetProtoByName');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAAsyncGetProtoByName]
end;
end;
var
_WSAAsyncGetProtoByNumber: Pointer;
function WSAAsyncGetProtoByNumber;
begin
GetProcedureAddress(_WSAAsyncGetProtoByNumber, wsock32, 'WSAAsyncGetProtoByNumber');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAAsyncGetProtoByNumber]
end;
end;
var
_WSAAsyncGetHostByName: Pointer;
function WSAAsyncGetHostByName;
begin
GetProcedureAddress(_WSAAsyncGetHostByName, wsock32, 'WSAAsyncGetHostByName');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAAsyncGetHostByName]
end;
end;
var
_WSAAsyncGetHostByAddr: Pointer;
function WSAAsyncGetHostByAddr;
begin
GetProcedureAddress(_WSAAsyncGetHostByAddr, wsock32, 'WSAAsyncGetHostByAddr');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAAsyncGetHostByAddr]
end;
end;
var
_WSACancelAsyncRequest: Pointer;
function WSACancelAsyncRequest;
begin
GetProcedureAddress(_WSACancelAsyncRequest, wsock32, 'WSACancelAsyncRequest');
asm
MOV ESP, EBP
POP EBP
JMP [_WSACancelAsyncRequest]
end;
end;
var
_WSAAsyncSelect: Pointer;
function WSAAsyncSelect;
begin
GetProcedureAddress(_WSAAsyncSelect, wsock32, 'WSAAsyncSelect');
asm
MOV ESP, EBP
POP EBP
JMP [_WSAAsyncSelect]
end;
end;
var
_WSARecvEx: Pointer;
function WSARecvEx;
begin
GetProcedureAddress(_WSARecvEx, wsock32, 'WSARecvEx');
asm
MOV ESP, EBP
POP EBP
JMP [_WSARecvEx]
end;
end;
var
_TransmitFile: Pointer;
function TransmitFile;
begin
GetProcedureAddress(_TransmitFile, wsock32, 'TransmitFile');
asm
MOV ESP, EBP
POP EBP
JMP [_TransmitFile]
end;
end;
var
_AcceptEx: Pointer;
function AcceptEx;
begin
GetProcedureAddress(_AcceptEx, wsock32, 'AcceptEx');
asm
MOV ESP, EBP
POP EBP
JMP [_AcceptEx]
end;
end;
var
_GetAcceptExSockaddrs: Pointer;
procedure GetAcceptExSockaddrs;
begin
GetProcedureAddress(_GetAcceptExSockaddrs, wsock32, 'GetAcceptExSockaddrs');
asm
MOV ESP, EBP
POP EBP
JMP [_GetAcceptExSockaddrs]
end;
end;
{$ELSE}
function __WSAFDIsSet; external wsock32 name '__WSAFDIsSet';
function accept; external wsock32 name 'accept';
function bind; external wsock32 name 'bind';
function closesocket; external wsock32 name 'closesocket';
function connect; external wsock32 name 'connect';
function ioctlsocket; external wsock32 name 'ioctlsocket';
function getpeername; external wsock32 name 'getpeername';
function getsockname; external wsock32 name 'getsockname';
function getsockopt; external wsock32 name 'getsockopt';
function htonl; external wsock32 name 'htonl';
function htons; external wsock32 name 'htons';
function inet_addr; external wsock32 name 'inet_addr';
function inet_ntoa; external wsock32 name 'inet_ntoa';
function listen; external wsock32 name 'listen';
function ntohl; external wsock32 name 'ntohl';
function ntohs; external wsock32 name 'ntohs';
function recv; external wsock32 name 'recv';
function recvfrom; external wsock32 name 'recvfrom';
function select; external wsock32 name 'select';
function send; external wsock32 name 'send';
function sendto; external wsock32 name 'sendto';
function setsockopt; external wsock32 name 'setsockopt';
function shutdown; external wsock32 name 'shutdown';
function socket; external wsock32 name 'socket';
function gethostbyaddr; external wsock32 name 'gethostbyaddr';
function gethostbyname; external wsock32 name 'gethostbyname';
function gethostname; external wsock32 name 'gethostname';
function getservbyport; external wsock32 name 'getservbyport';
function getservbyname; external wsock32 name 'getservbyname';
function getprotobynumber; external wsock32 name 'getprotobynumber';
function getprotobyname; external wsock32 name 'getprotobyname';
function WSAStartup; external wsock32 name 'WSAStartup';
function WSACleanup; external wsock32 name 'WSACleanup';
procedure WSASetLastError; external wsock32 name 'WSASetLastError';
function WSAGetLastError; external wsock32 name 'WSAGetLastError';
function WSAIsBlocking; external wsock32 name 'WSAIsBlocking';
function WSAUnhookBlockingHook; external wsock32 name 'WSAUnhookBlockingHook';
function WSASetBlockingHook; external wsock32 name 'WSASetBlockingHook';
function WSACancelBlockingCall; external wsock32 name 'WSACancelBlockingCall';
function WSAAsyncGetServByName; external wsock32 name 'WSAAsyncGetServByName';
function WSAAsyncGetServByPort; external wsock32 name 'WSAAsyncGetServByPort';
function WSAAsyncGetProtoByName; external wsock32 name 'WSAAsyncGetProtoByName';
function WSAAsyncGetProtoByNumber; external wsock32 name 'WSAAsyncGetProtoByNumber';
function WSAAsyncGetHostByName; external wsock32 name 'WSAAsyncGetHostByName';
function WSAAsyncGetHostByAddr; external wsock32 name 'WSAAsyncGetHostByAddr';
function WSACancelAsyncRequest; external wsock32 name 'WSACancelAsyncRequest';
function WSAAsyncSelect; external wsock32 name 'WSAAsyncSelect';
function WSARecvEx; external wsock32 name 'WSARecvEx';
function TransmitFile; external wsock32 name 'TransmitFile';
function AcceptEx; external wsock32 name 'AcceptEx';
procedure GetAcceptExSockaddrs; external wsock32 name 'GetAcceptExSockaddrs';
{$ENDIF DYNAMIC_LINK}
{$ENDIF JWA_INTERFACESECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
end.
{$ENDIF JWA_OMIT_SECTIONS}