+ Winsock unit added

* PMWSock unit updated (to be less or more compitilbe with win32 winsock)
This commit is contained in:
yuri 2003-08-15 10:53:43 +00:00
parent 26fd8fad6b
commit e0e20d6b67
2 changed files with 349 additions and 105 deletions

View File

@ -16,11 +16,13 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
****************************************************************************}
{$ifndef winsock}
unit pmwsock;
{$endif}
Interface
{$PACKRECORDS 1}
{$MACRO ON}
Interface
Uses OS2Def;
@ -28,6 +30,10 @@ Uses OS2Def;
type
TSocket=Cardinal;
type
PLongint=^Longint;
PCardinal=^Cardinal;
// Select uses arrays of TSockets. These macros manipulate such
// arrays. FD_SETSIZE may be defined by the user before including
// this file, but the default here should be >= 64.
@ -37,22 +43,25 @@ type
const
FD_SETSIZE = 64;
//#pragma pack(4)
type
fd_set=record
fdset=record
fd_count: Word; // how many are SET?
fd_array: Array[0..FD_SETSIZE-1] of TSocket; // an array of TSockets
end;
//#pragma pack()
TFDSet = fdset;
PFDSet = ^fdset;
Function __WSAFDIsSet(a: TSocket;var b: fd_set): Longint; cdecl;
Function __WSAFDIsSet(a: TSocket;var b: fdset): Longint; cdecl;
external 'PMWSock' name '__WSAFDIsSet';
Function __WSAFDIsSet_(s:TSocket; var FDSet:TFDSet): Longint; cdecl;
external 'PMWSock' name '__WSAFDIsSet';
Function FD_ISSET(a: TSocket;var b: fd_set): Longint; cdecl;
Function FD_ISSET(a: TSocket;var b: fdset): Longint; cdecl;
external 'PMWSock' name '__WSAFDIsSet';
Procedure FD_CLR(ASocket: TSocket; var aset: fd_set);
Procedure FDSET(ASocket: TSocket; var FDSet: fd_set);
Procedure FD_CLR(ASocket: TSocket; var aset: fdset);
Procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
// Structure used in select() call, taken from the BSD file sys/time.h.
type
@ -61,8 +70,21 @@ type
tv_usec: LongInt; // and microseconds
end;
TTimeVal = timeval;
PTimeVal = ^TTimeVal;
{ found no reference to this type in c header files and here. AlexS }
{ minutes west of Greenwich }
{ type of dst correction }
timezone = record
tz_minuteswest : longint;
tz_dsttime : longint;
end;
TTimeZone = timezone;
PTimeZone = ^TTimeZone;
// Operations on timevals.
// * NB: timercmp does not work for >= or <=.
// timercmp does not work for >= or <=.
Function timerisset(tvp: timeval): Boolean;
//Function timercmp(tvp, uvp, cmp);
@ -83,10 +105,6 @@ const
IOC_IN = $80000000; // copy in parameters
IOC_INOUT = IOC_IN or IOC_OUT; // 0x20000000 distinguishes new &
// old ioctl's
{$define _IOR(x,y,t):=(IOC_OUT or ((Longint (sizeof(t)) and IOCPARM_MASK) shl 16) or (x shl 8) or y)}
{$define _IOW(x,y,t):=(IOC_IN or ((Longint(sizeof(t)) and IOCPARM_MASK) shl 16) or (x shl 8) or y)}
const
// get # bytes to read
FIONREAD=(IOC_OUT or ((Longint (sizeof(Cardinal)) and IOCPARM_MASK) shl 16) or (Ord('f') shl 8) or 127);
@ -118,10 +136,12 @@ type
h_aliases: PPChar; // alias list
h_addrtype: LongInt; // host address type
h_length: LongInt; // length of address
h_addr_list: PPChar; // list of addresses from name server
{$define h_addr:=h_addr_list[0]} // address, for backward compatiblity
case byte of
0: (h_addr_list: ppchar); // list of addresses from name server
1: (h_addr: ppchar) // address, for backward compatiblity
end;
phostent=^hostent;
THostEnt = hostent;
// It is assumed here that a network number
// fits in 32 bits.
@ -133,13 +153,16 @@ type
n_net: Cardinal; // network #
End;
pnetent=^netent;
TNetEnt = netent;
type
servent=record
s_name: PChar; // official service name
s_aliases: PPChar; // alias list
s_port: LongInt; // port #
s_proto: PChar; // protocol to use
end;
TServEnt = servent;
pservent=^servent;
protoent=record
@ -147,6 +170,7 @@ type
p_aliases: PPChar; // alias list
p_proto: LongInt; // protocol #
end;
TProtoEnt = protoent;
pprotoent=^protoent;
// Constants and structures defined by the internet system,
@ -222,6 +246,8 @@ type
2:(s_un_w:record s_w1,s_w2: Word; end;);
3:(s_addr: Cardinal);
end;
TInAddr = in_addr;
PInAddr = ^TInAddr;
{$define s_addr:=in_addr.S_addr} // can be used for most tcp & ip code
{$define s_host:=in_addr.S_un_b.s_b2} // host on imp
@ -230,7 +256,6 @@ type
{$define s_impno:=in_addr.S_un_b.s_b4} // imp #
{$define s_lh:=in_addr.S_un_b.s_b3} // logical host
// 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.
@ -260,18 +285,28 @@ const
// Socket address, internet style.
Type
sockaddr_in=Record
sin_family:Integer;
sin_port:Word;
sin_addr:in_addr;
sin_zero:Array[0..7] of Char;
End;
sockaddr_in=Record
case integer of
0 : ( (* equals to sockaddr_in, size is 16 byte *)
sin_family : SmallInt; (* 2 byte *)
sin_port : Word; (* 2 byte *)
sin_addr : TInAddr; (* 4 byte *)
sin_zero : array[0..8-1] of char; (* 8 byte *)
);
1 : ((* equals to sockaddr, size is 16 byte *)
sa_family : Smallint; (* 2 byte *)
sa_data : array[0..14-1] of char; (* 14 byte *)
);
end;
TSockAddrIn = sockaddr_in;
PSockAddrIn = ^TSockAddrIn;
TSockAddr = sockaddr_in;
PSockAddr = ^TSockAddr;
const
WSADESCRIPTION_LEN =256;
WSASYS_STATUS_LEN =128;
//#pragma pack(4)
Type
WSAData=Record
wVersion:Word;
@ -280,19 +315,34 @@ Type
szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char;
iMaxSockets:Word;
iMaxUdpDg:Word;
// in OS/2 no such entry
// pad1 : SmallInt; { 2 byte, ofs 394 } { ensure right packaging }
lpVendorInfo:PChar;
End;
PWSADATA=^WSAData;
LPWSADATA=^WSAData;
//#pragma pack()
TWSAData = WSADATA;
// Options for use with [gs]etsockopt at the IP level.
Const
IP_OPTIONS =1; // set/get IP per-packet options
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.
@ -336,10 +386,39 @@ Const
SO_ERROR =$1007; // get error status and clear
SO_TYPE =$1008; // get socket 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;
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.
Const
TCP_NODELAY =$0001;
TCP_NODELAY = $0001;
TCP_BSDURGENT = $7000;
// Address families.
@ -364,7 +443,15 @@ Const
AF_APPLETALK =16; // AppleTalk
AF_NETBIOS =17; // NetBios-style addresses
AF_MAX =18;
{ FireFox }
AF_FIREFOX = 19;
{ Somebody is using this! }
AF_UNKNOWN1 = 20;
{ Banyan }
AF_BAN = 21;
AF_MAX =22;
// Structure used by kernel to store most
// addresses.
@ -383,6 +470,9 @@ Type
sp_protocol:Word; // protocol
End;
TSockProto = sockproto;
PSockProto = ^TSockProto;
// Protocol families, same as address families for now.
@ -406,15 +496,21 @@ Const
PF_HYLINK =AF_HYLINK;
PF_APPLETALK =AF_APPLETALK;
PF_MAX =AF_MAX;
PF_FIREFOX = AF_FIREFOX;
PF_UNKNOWN1 = AF_UNKNOWN1;
PF_BAN = AF_BAN;
PF_MAX = AF_MAX;
// Structure used for manipulating linger option.
Type
linger=Record
l_onoff:LongInt; // option on/off
l_linger:LongInt; // linger time
End;
linger=Record
l_onoff:LongInt; // option on/off
l_linger:LongInt; // linger time
End;
TLinger = linger;
PLinger = ^TLinger;
// Level number for (get/set)sockopt() to apply to socket itself.
@ -433,6 +529,7 @@ Const
// Define constant based on rfc883, used by gethostbyxxxx() calls.
MAXGETHOSTSTRUCT =1024;
MAXHOSTNAMELEN = MAXGETHOSTSTRUCT;
// Define flags to be used with the WSAAsyncSelect() call.
@ -497,6 +594,7 @@ Const
WSAEDQUOT =(WSABASEERR+69);
WSAESTALE =(WSABASEERR+70);
WSAEREMOTE =(WSABASEERR+71);
WSAEDISCON = WSABASEERR + 101;
// Extended Windows Sockets error constant definitions
@ -581,22 +679,56 @@ Const
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 : Cardinal;
Tail : Pointer;
TailLength : Cardinal;
end;
TRANSMIT_FILE_BUFFERS = _TRANSMIT_FILE_BUFFERS;
TTransmitFileBuffers = _TRANSMIT_FILE_BUFFERS;
PTransmitFileBuffers = ^TTransmitFileBuffers;
// Socket function prototypes
Function accept(s: TSocket; Var addr; Var addrlen: LongInt): TSocket; cdecl;
external 'PMWSock' name 'accept';
Function accept(s:TSocket; addr: PSockAddr; addrlen : PLongint) : TSocket; cdecl;
external 'PMWSock' name 'accept';
Function accept(s:TSocket; addr: PSockAddr; var addrlen : Longint) : TSocket; cdecl;
external 'PMWSock' name 'accept';
Function bind(s: TSocket; Const addr; namelen: LongInt): LongInt; cdecl;
external 'PMWSock' name 'bind';
Function bind(s:TSocket; addr: PSockaddr;namelen: Longint): Longint; cdecl;
external 'PMWSock' name 'bind';
Function closesocket(s: TSocket): LongInt; cdecl;
external 'PMWSock' name 'closesocket';
Function connect(s: TSocket; Const name: sockaddr; namelen: LongInt): LongInt; cdecl;
external 'PMWSock' name 'connect';
Function connect(s:TSocket; addr:PSockAddr; namelen: Longint): Longint; cdecl;
external 'PMWSock' name 'connect';
Function ioctlsocket(s: TSocket; cmd: LongInt; Var argp: Cardinal): LongInt; cdecl;
external 'PMWSock' name 'ioctlsocket';
Function ioctlsocket(s: TSocket; cmd: longint; var arg:longint): Longint; cdecl;
external 'PMWSock' name 'ioctlsocket';
Function ioctlsocket(s: TSocket; cmd: longint; argp: PCardinal): Longint; cdecl;
external 'PMWSock' name 'ioctlsocket';
Function getpeername(s: TSocket; Var name: sockaddr; Var nameLen: LongInt): LongInt; cdecl;
external 'PMWSock' name 'getpeername';
@ -606,6 +738,8 @@ Function getsockname(s: TSocket;Var name: sockaddr; Var namelen: LongInt): LongI
Function getsockopt(s: TSocket; level, optname: LongInt;Var optval; Var optlen: LongInt): LongInt; cdecl;
external 'PMWSock' name 'getsockopt';
Function getsockopt(s: TSocket; level: Longint; optname: Longint; optval:pchar;var optlen: Longint): Longint; cdecl;
external 'PMWSock' name 'getsockopt';
Function htonl(hostlong: Cardinal): Cardinal; cdecl;
external 'PMWSock' name 'htonl';
@ -613,11 +747,13 @@ Function htonl(hostlong: Cardinal): Cardinal; cdecl;
Function htons(hostshort: Word): Word; cdecl;
external 'PMWSock' name 'htons';
Function inet_addr(Const cp: PChar): Cardinal; cdecl;
Function inet_addr(cp: pchar): Cardinal; cdecl;
external 'PMWSock' name 'inet_addr';
Function inet_ntoa(Var _in: in_addr): PChar; cdecl;
external 'PMWSock' name 'inet_ntoa';
Function inet_ntoa(i: PInAddr): pchar; cdecl;
external 'PMWSock' name 'inet_ntoa';
Function listen(s: TSocket; backlog: LongInt): LongInt; cdecl;
external 'PMWSock' name 'listen';
@ -630,14 +766,25 @@ Function ntohs(netshort: Word): Word; cdecl;
Function recv(s: TSocket;Var Buf; len, flags: LongInt): LongInt; cdecl;
external 'PMWSock' name 'recv';
Function recv(s: TSocket; buf:pchar; len: Longint; flags: Longint): Longint; cdecl;
external 'PMWSock' name 'recv';
Function recvfrom(s: TSocket; Var Buf: PChar; len, flags:LongInt;
Var from: sockaddr; Var fromLen: LongInt): LongInt; cdecl;
external 'PMWSock' name 'recvfrom';
Function recvfrom(s: TSocket; buf:pchar; len: Longint; flags: Longint;
from: PSockAddr; fromlen: Longint): Longint; cdecl;
external 'PMWSock' name 'recvfrom';
Function recvfrom(s: TSocket; var buf; len: Longint; flags: Longint;
Const from: TSockAddr; var fromlen: Longint): Longint; cdecl;
external 'PMWSock' name 'recvfrom';
Function select(nfds: LongInt; Var readfds, writefds, exceptfds: fd_set;
Function select(nfds: LongInt; Var readfds, writefds, exceptfds: fdset;
Const timeout: timeval): LongInt; cdecl;
external 'PMWSock' name 'select';
Function select(nfds: Longint; readfds, writefds, exceptfds : PFDSet;
timeout: PTimeVal): Longint; cdecl;
external 'PMWSock' name 'select';
Function send(s: TSocket; Const Buf: PChar; len, flags: LongInt): LongInt; cdecl;
external 'PMWSock' name 'send';
@ -645,9 +792,12 @@ Function send(s: TSocket; Const Buf: PChar; len, flags: LongInt): LongInt; cdecl
Function sendto(s: TSocket; Const Buf: PChar; len, flags: LongInt;
Const _to: sockaddr; tolen: LongInt): LongInt; cdecl;
external 'PMWSock' name 'sendto';
Function sendto(s: TSocket; buf: pchar; len: Longint; flags: Longint;
toaddr: PSockAddr; tolen: Longint): Longint; cdecl;
external 'PMWSock' name 'sendto';
Function setsockopt(s: TSocket; level, optname: LongInt;
Const optval: PChar; optlen: LongInt): LongInt; cdecl;
Function setsockopt(s: TSocket; level: Longint; optname: Longint;
optval: pchar; optlen: Longint): Longint; cdecl;
external 'PMWSock' name 'setsockopt';
Function shutdown(s: TSocket; how: LongInt): LongInt; cdecl;
@ -658,25 +808,25 @@ Function socket(af, typ, protocol: LongInt): TSocket; cdecl;
// Database function prototypes
Function gethostbyaddr(Var addr: PChar; len, typ: LongInt): phostent; cdecl;
Function gethostbyaddr(addr: pchar; len: Longint; t: Longint): PHostEnt; cdecl;
external 'PMWSock' name 'gethostbyaddr';
Function gethostbyname(Const name: PChar): phostent; cdecl;
Function gethostbyname(name: pchar): PHostEnt;stdcall; cdecl;
external 'PMWSock' name 'gethostbyname';
Function gethostname(Const name: PChar; namelen: LongInt): LongInt; cdecl;
Function gethostname(name: pchar; namelen: Longint): Longint; cdecl;
external 'PMWSock' name 'gethostname';
Function getservbyport(port: LongInt;Const proto: PChar): pservent; cdecl;
Function getservbyport(port: Longint; proto: pchar): PServEnt; cdecl;
external 'PMWSock' name 'getservbyport';
Function getservbyname(Const name, proto: PChar): pservent; cdecl;
Function getservbyname(name: pchar; proto: pchar): PServEnt; cdecl;
external 'PMWSock' name 'getservbyname';
Function getprotobynumber(proto: LongInt): pprotoent; cdecl;
external 'PMWSock' name 'getprotobynumber';
Function getprotobyname(Const name: PChar): pprotoent; cdecl;
Function getprotobyname(name: pchar): PProtoEnt; cdecl;
external 'PMWSock' name 'getprotobyname';
// Microsoft Windows Extension function prototypes
@ -705,39 +855,37 @@ Function WSASetBlockingHook(lpBlockFunc: Pointer): Pointer; cdecl;
Function WSACancelBlockingCall: LongInt; cdecl;
external 'PMWSock' name 'WSACancelBlockingCall';
Function WSAAsyncGetServByName(ahWnd: HWND; wMsg: Cardinal;
Const name, proto: PChar;
Var Buf: PChar;
buflen: LongInt): Cardinal; cdecl;
Function WSAAsyncGetServByName(hWnd: HWND; wMsg: Cardinal;
name: pchar; proto: pchar;
buf: pchar;
buflen: Longint): Cardinal; cdecl;
external 'PMWSock' name 'WSAAsyncGetServByName';
Function WSAAsyncGetServByPort(ahWnd: HWND; wMsg: Cardinal;
port: LongInt;
Const proto: PChar;
Var Buf: PChar;
buflen: LongInt): Cardinal; cdecl;
Function WSAAsyncGetServByPort(hWnd: HWND; wMsg: Cardinal;
port: Longint;
proto: pchar; buf: pchar;
buflen: Longint): Cardinal; cdecl;
external 'PMWSock' name 'WSAAsyncGetServByPort';
Function WSAAsyncGetProtoByName(ahWnd: HWND; wMsg: Cardinal;
Const name: PChar;
Var Buf: PChar;
buflen: LongInt): Cardinal; cdecl;
Function WSAAsyncGetProtoByName(hWnd: HWND; wMsg: Cardinal;
name: pchar; buf: pchar;
buflen: Longint): Cardinal; cdecl;
external 'PMWSock' name 'WSAAsyncGetProtoByName';
Function WSAAsyncGetProtoByNumber(ahWnd: HWND; wMsg: Cardinal;
number:LongInt;
Var Buf: PChar;
buflen: LongInt): Cardinal; cdecl;
Function WSAAsyncGetProtoByNumber(hWnd: HWND; wMsg: Cardinal;
number: Longint;
buf: pchar;
buflen: Longint): Cardinal; cdecl;
external 'PMWSock' name 'WSAAsyncGetProtoByNumber';
Function WSAAsyncGetHostByName(ahWnd: HWND; wMsg: Cardinal;
Const name: PChar;
Var Buf: PChar; buflen: LongInt): Cardinal; cdecl;
Function WSAAsyncGetHostByName(hWnd: HWND; wMsg: Cardinal;
name: pchar; buf: pchar;
buflen: Longint): Cardinal; cdecl;
external 'PMWSock' name 'WSAAsyncGetHostByName';
Function WSAAsyncGetHostByAddr(ahWnd: HWND; wMsg: Cardinal;
Const addr: PChar; len, typ: LongInt;
Var Buf: PChar; buflen:LongInt): Cardinal; cdecl;
Function WSAAsyncGetHostByAddr(hWnd: HWND; wMsg: Cardinal;
addr: pchar; len: Longint; t: Longint;
buf: pchar; buflen: Longint): Cardinal; cdecl;
external 'PMWSock' name 'WSAAsyncGetHostByAddr';
Function WSACancelAsyncRequest(hAsyncTaskHandle: Cardinal): LongInt; cdecl;
@ -752,44 +900,67 @@ Function WSAAsyncSelect(s: TSocket; ahWnd: HWND; wMsg: Cardinal; lEvent: LongInt
// WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
// when constructing the response to a WSAAsyncGetXByY() routine.
(*
#define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error)
/*
* WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
* when constructing the response to WSAAsyncSelect().
*/
#define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error)
/*
* WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
* to extract the buffer length from the lParam in the response
* to a WSAGetXByY().
*/
#define WSAGETASYNCBUFLEN(lParam) LOUSHORT(lParam)
/*
* WSAGETASYNCERROR is intended for use by the Windows Sockets application
* to extract the error code from the lParam in the response
* to a WSAGetXByY().
*/
#define WSAGETASYNCERROR(lParam) HIUSHORT(lParam)
/*
* WSAGETSELECTEVENT is intended for use by the Windows Sockets application
* to extract the event code from the lParam in the response
* to a WSAAsyncSelect().
*/
#define WSAGETSELECTEVENT(lParam) LOUSHORT(lParam)
/*
* WSAGETSELECTERROR is intended for use by the Windows Sockets application
* to extract the error code from the lParam in the response
* to a WSAAsyncSelect().
*/
#define WSAGETSELECTERROR(lParam) HIUSHORT(lParam)
*)
Function WSAMakeAsyncReply(Buflen,Error:Word):dword;
// Seems to be error in rtl\win32\winsock.pp
Function WSAMakeSyncReply(Buflen,Error:Word):dword;
Procedure FD_ZERO(var aset: fd_set);
// WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
// when constructing the response to WSAAsyncSelect().
Function WSAMakeSelectReply(Event,Error:Word):dword;
// 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(Param:dword):Word;
//
// 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(Param:dword):Word;
// 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(Param:dword):Word;
// 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(Param:dword):Word;
Procedure FD_ZERO(var aset: fdset);
// Following functions not found in PMWSock
{
function WSARecvEx(s:TSocket;var buf; len:tOS_INT; flags:ptOS_INT):tOS_INT;stdcall;
external winsockdll name 'WSARecvEx';
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';
}
Implementation
Procedure FD_CLR(ASocket: TSocket; var aset: fd_set);
Procedure FD_CLR(ASocket: TSocket; var aset: fdset);
var
I: Cardinal;
begin
@ -808,20 +979,60 @@ begin
end;
end;
Procedure FD_ZERO(var aset: fd_set);
Procedure FD_ZERO(var aset: fdset);
Begin
aset.fd_count:=0;
End;
procedure FDSET(ASocket: TSocket; var FDSet: fd_set);
procedure FD_SET(Socket: TSocket; var FDSet: tfdset);
begin
if FDSet.fd_count < FD_SETSIZE then
begin
FDSet.fd_array[FDSet.fd_count] := ASocket;
FDSet.fd_array[FDSet.fd_count] := Socket;
Inc(FDSet.fd_count);
end;
end;
Function MAKELONG(a,b : longint) : LONGINT;
begin
MAKELONG:=LONGINT((WORD(a)) or ((CARDINAL(WORD(b))) shl 16));
end;
Function WSAMakeAsyncReply(Buflen,Error:Word):dword;
begin
WSAMakeAsyncReply:=MakeLong(Buflen, Error);
end;
Function WSAMakeSyncReply(Buflen,Error:Word):dword;
begin
WSAMakeSyncReply:=WSAMakeAsyncReply(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;
Function timerisset(tvp: timeval): Boolean;
Begin
TimerIsSet:=Boolean(tvp.tv_sec or tvp.tv_usec);
@ -845,7 +1056,11 @@ end.
{
$Log$
Revision 1.1 2003-04-04 12:02:21 yuri
Revision 1.2 2003-08-15 10:53:43 yuri
+ Winsock unit added
* PMWSock unit updated (to be less or more compitilbe with win32 winsock)
Revision 1.1 2003/04/04 12:02:21 yuri
+ Initial import
}

29
rtl/os2/winsock.pas Normal file
View File

@ -0,0 +1,29 @@
{****************************************************************************
$Id$
This file is part of the Free Pascal run time library.
Copyrigth (c) 2003 by Yuri Prokushev (prokushev@freemail.ru)
This file corresponds to version 1.1 of the Windows Sockets
specification.
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.
****************************************************************************}
unit winsock;
{$define winsock}
{$i pmwsock.pas}
{
$Log$
Revision 1.1 2003-08-15 10:53:43 yuri
+ Winsock unit added
* PMWSock unit updated (to be less or more compitilbe with win32 winsock)
}