Release 23
git-svn-id: https://svn.code.sf.net/p/synalist/code/trunk@49 7c85be65-684b-0410-a082-b2ed4fbef004
This commit is contained in:
623
synsock.pas
623
synsock.pas
@ -1,9 +1,9 @@
|
||||
{==============================================================================|
|
||||
| Project : Delphree - Synapse | 001.000.001 |
|
||||
| Project : Delphree - Synapse | 001.000.002 |
|
||||
|==============================================================================|
|
||||
| Content: Socket Independent Platform |
|
||||
|==============================================================================|
|
||||
| The contents of this file are subject to the Mozilla Public License Ver. 1.0 |
|
||||
| The contents of this file are subject to the Mozilla Public License Ver. 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/ |
|
||||
| |
|
||||
@ -23,83 +23,86 @@
|
||||
| (Found at URL: http://www.ararat.cz/synapse/) |
|
||||
|==============================================================================}
|
||||
|
||||
{$WEAKPACKAGEUNIT ON}
|
||||
|
||||
unit synsock;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{$IFDEF LINUX}
|
||||
libc, kernelioctl;
|
||||
Libc, KernelIoctl;
|
||||
{$ELSE}
|
||||
winsock, windows;
|
||||
Windows, WinSock;
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF LINUX}
|
||||
const
|
||||
WSAEINTR = EINTR;
|
||||
WSAEBADF = EBADF;
|
||||
WSAEACCES = EACCES;
|
||||
WSAEFAULT = EFAULT;
|
||||
WSAEINVAL = EINVAL;
|
||||
WSAEMFILE = EMFILE;
|
||||
WSAEWOULDBLOCK = EWOULDBLOCK;
|
||||
WSAEINPROGRESS = EINPROGRESS;
|
||||
WSAEALREADY = EALREADY;
|
||||
WSAENOTSOCK = ENOTSOCK;
|
||||
WSAEDESTADDRREQ = EDESTADDRREQ;
|
||||
WSAEMSGSIZE = EMSGSIZE;
|
||||
WSAEPROTOTYPE = EPROTOTYPE;
|
||||
WSAENOPROTOOPT = ENOPROTOOPT;
|
||||
WSAEINTR = EINTR;
|
||||
WSAEBADF = EBADF;
|
||||
WSAEACCES = EACCES;
|
||||
WSAEFAULT = EFAULT;
|
||||
WSAEINVAL = EINVAL;
|
||||
WSAEMFILE = EMFILE;
|
||||
WSAEWOULDBLOCK = EWOULDBLOCK;
|
||||
WSAEINPROGRESS = EINPROGRESS;
|
||||
WSAEALREADY = EALREADY;
|
||||
WSAENOTSOCK = ENOTSOCK;
|
||||
WSAEDESTADDRREQ = EDESTADDRREQ;
|
||||
WSAEMSGSIZE = EMSGSIZE;
|
||||
WSAEPROTOTYPE = EPROTOTYPE;
|
||||
WSAENOPROTOOPT = ENOPROTOOPT;
|
||||
WSAEPROTONOSUPPORT = EPROTONOSUPPORT;
|
||||
WSAESOCKTNOSUPPORT = ESOCKTNOSUPPORT;
|
||||
WSAEOPNOTSUPP = EOPNOTSUPP;
|
||||
WSAEPFNOSUPPORT = EPFNOSUPPORT;
|
||||
WSAEAFNOSUPPORT = EAFNOSUPPORT;
|
||||
WSAEADDRINUSE = EADDRINUSE;
|
||||
WSAEADDRNOTAVAIL = EADDRNOTAVAIL;
|
||||
WSAENETDOWN = ENETDOWN;
|
||||
WSAENETUNREACH = ENETUNREACH;
|
||||
WSAENETRESET = ENETRESET;
|
||||
WSAECONNABORTED = ECONNABORTED;
|
||||
WSAECONNRESET = ECONNRESET;
|
||||
WSAENOBUFS = ENOBUFS;
|
||||
WSAEISCONN = EISCONN;
|
||||
WSAENOTCONN = ENOTCONN;
|
||||
WSAESHUTDOWN = ESHUTDOWN;
|
||||
WSAETOOMANYREFS = ETOOMANYREFS;
|
||||
WSAETIMEDOUT = ETIMEDOUT;
|
||||
WSAECONNREFUSED = ECONNREFUSED;
|
||||
WSAELOOP = ELOOP;
|
||||
WSAENAMETOOLONG = ENAMETOOLONG;
|
||||
WSAEHOSTDOWN = EHOSTDOWN;
|
||||
WSAEHOSTUNREACH = EHOSTUNREACH;
|
||||
WSAENOTEMPTY = ENOTEMPTY;
|
||||
WSAEPROCLIM = -1;
|
||||
WSAEUSERS = EUSERS;
|
||||
WSAEDQUOT = EDQUOT;
|
||||
WSAESTALE = ESTALE;
|
||||
WSAEREMOTE = EREMOTE;
|
||||
WSASYSNOTREADY = -2;
|
||||
WSAEOPNOTSUPP = EOPNOTSUPP;
|
||||
WSAEPFNOSUPPORT = EPFNOSUPPORT;
|
||||
WSAEAFNOSUPPORT = EAFNOSUPPORT;
|
||||
WSAEADDRINUSE = EADDRINUSE;
|
||||
WSAEADDRNOTAVAIL = EADDRNOTAVAIL;
|
||||
WSAENETDOWN = ENETDOWN;
|
||||
WSAENETUNREACH = ENETUNREACH;
|
||||
WSAENETRESET = ENETRESET;
|
||||
WSAECONNABORTED = ECONNABORTED;
|
||||
WSAECONNRESET = ECONNRESET;
|
||||
WSAENOBUFS = ENOBUFS;
|
||||
WSAEISCONN = EISCONN;
|
||||
WSAENOTCONN = ENOTCONN;
|
||||
WSAESHUTDOWN = ESHUTDOWN;
|
||||
WSAETOOMANYREFS = ETOOMANYREFS;
|
||||
WSAETIMEDOUT = ETIMEDOUT;
|
||||
WSAECONNREFUSED = ECONNREFUSED;
|
||||
WSAELOOP = ELOOP;
|
||||
WSAENAMETOOLONG = ENAMETOOLONG;
|
||||
WSAEHOSTDOWN = EHOSTDOWN;
|
||||
WSAEHOSTUNREACH = EHOSTUNREACH;
|
||||
WSAENOTEMPTY = ENOTEMPTY;
|
||||
WSAEPROCLIM = -1;
|
||||
WSAEUSERS = EUSERS;
|
||||
WSAEDQUOT = EDQUOT;
|
||||
WSAESTALE = ESTALE;
|
||||
WSAEREMOTE = EREMOTE;
|
||||
WSASYSNOTREADY = -2;
|
||||
WSAVERNOTSUPPORTED = -3;
|
||||
WSANOTINITIALISED = -4;
|
||||
WSAEDISCON = -5;
|
||||
WSAHOST_NOT_FOUND = HOST_NOT_FOUND;
|
||||
WSATRY_AGAIN = TRY_AGAIN;
|
||||
WSANO_RECOVERY = NO_RECOVERY;
|
||||
WSANOTINITIALISED = -4;
|
||||
WSAEDISCON = -5;
|
||||
WSAHOST_NOT_FOUND = HOST_NOT_FOUND;
|
||||
WSATRY_AGAIN = TRY_AGAIN;
|
||||
WSANO_RECOVERY = NO_RECOVERY;
|
||||
// WSANO_DATA = NO_DATA;
|
||||
WSANO_DATA = -6;
|
||||
WSANO_DATA = -6;
|
||||
|
||||
{$ELSE}
|
||||
|
||||
const
|
||||
DLLStackName = 'wsock32.dll';
|
||||
var
|
||||
LibHandle : THandle = 0;
|
||||
LibHandle: THandle = 0;
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF LINUX}
|
||||
const
|
||||
WSADESCRIPTION_LEN = 256;
|
||||
WSASYS_STATUS_LEN = 128;
|
||||
WSADESCRIPTION_LEN = 256;
|
||||
WSASYS_STATUS_LEN = 128;
|
||||
type
|
||||
PWSAData = ^TWSAData;
|
||||
TWSAData = packed record
|
||||
@ -111,321 +114,328 @@ type
|
||||
iMaxUdpDg: Word;
|
||||
lpVendorInfo: PChar;
|
||||
end;
|
||||
DWORD=integer;
|
||||
TLinger=Linger;
|
||||
DWORD = Integer;
|
||||
TLinger = Linger;
|
||||
{$ENDIF}
|
||||
|
||||
|
||||
type
|
||||
TWSAStartup = function (wVersionRequired: word;
|
||||
var WSData: TWSAData): Integer; stdcall;
|
||||
TWSACleanup = function : Integer; stdcall;
|
||||
TWSAGetLastError = function : Integer; stdcall;
|
||||
TGetServByName = function (name, proto: PChar): PServEnt; stdcall;
|
||||
TGetServByPort = function (port: Integer; proto: PChar): PServEnt; stdcall;
|
||||
TGetProtoByName = function (name: PChar): PProtoEnt; stdcall;
|
||||
TGetProtoByNumber = function (proto: Integer): PProtoEnt; stdcall;
|
||||
TGetHostByName = function (name: PChar): PHostEnt; stdcall;
|
||||
TGetHostByAddr = function (addr: Pointer; len, Struct: Integer): PHostEnt; stdcall;
|
||||
TGetHostName = function (name: PChar; len: Integer): Integer; stdcall;
|
||||
TShutdown = function (s: TSocket; how: Integer): Integer; stdcall;
|
||||
TSetSockOpt = function (s: TSocket; level, optname: Integer;
|
||||
optval: PChar;
|
||||
optlen: Integer): Integer; stdcall;
|
||||
TGetSockOpt = function (s: TSocket; level, optname: Integer;
|
||||
optval: PChar;
|
||||
var optlen: Integer): Integer; stdcall;
|
||||
TSendTo = function (s: TSocket; var Buf;
|
||||
len, flags: Integer;
|
||||
var addrto: TSockAddr;
|
||||
tolen: Integer): Integer; stdcall;
|
||||
TSend = function (s: TSocket; var Buf;
|
||||
len, flags: Integer): Integer; stdcall;
|
||||
TRecv = function (s: TSocket;
|
||||
var Buf;
|
||||
len, flags: Integer): Integer; stdcall;
|
||||
TRecvFrom = function (s: TSocket;
|
||||
var Buf; len, flags: Integer;
|
||||
var from: TSockAddr;
|
||||
var fromlen: Integer): Integer; stdcall;
|
||||
Tntohs = function (netshort: u_short): u_short; stdcall;
|
||||
Tntohl = function (netlong: u_long): u_long; stdcall;
|
||||
TListen = function (s: TSocket;
|
||||
backlog: Integer): Integer; stdcall;
|
||||
TIoctlSocket = function (s: TSocket; cmd: DWORD;
|
||||
var arg: u_long): Integer; stdcall;
|
||||
TInet_ntoa = function (inaddr: TInAddr): PChar; stdcall;
|
||||
TInet_addr = function (cp: PChar): u_long; stdcall;
|
||||
Thtons = function (hostshort: u_short): u_short; stdcall;
|
||||
Thtonl = function (hostlong: u_long): u_long; stdcall;
|
||||
TGetSockName = function (s: TSocket; var name: TSockAddr;
|
||||
var namelen: Integer): Integer; stdcall;
|
||||
TGetPeerName = function (s: TSocket; var name: TSockAddr;
|
||||
var namelen: Integer): Integer; stdcall;
|
||||
TConnect = function (s: TSocket; var name: TSockAddr;
|
||||
namelen: Integer): Integer; stdcall;
|
||||
TCloseSocket = function (s: TSocket): Integer; stdcall;
|
||||
TBind = function (s: TSocket; var addr: TSockAddr;
|
||||
namelen: Integer): Integer; stdcall;
|
||||
TAccept = function (s: TSocket; addr: PSockAddr;
|
||||
addrlen: PInteger): TSocket; stdcall;
|
||||
TSocketProc = function (af, Struct, protocol: Integer): TSocket; stdcall;
|
||||
TSelect = function (nfds: Integer; readfds, writefds, exceptfds: PFDSet;
|
||||
timeout: PTimeVal): Longint; stdcall;
|
||||
TWSAStartup = function(wVersionRequired: Word;
|
||||
var WSData: TWSAData): Integer; stdcall;
|
||||
TWSACleanup = function: Integer; stdcall;
|
||||
TWSAGetLastError = function: Integer; stdcall;
|
||||
TGetServByName = function(name, proto: PChar): PServEnt; stdcall;
|
||||
TGetServByPort = function(port: Integer; proto: PChar): PServEnt; stdcall;
|
||||
TGetProtoByName = function(name: PChar): PProtoEnt; stdcall;
|
||||
TGetProtoByNumber = function(proto: Integer): PProtoEnt; stdcall;
|
||||
TGetHostByName = function(name: PChar): PHostEnt; stdcall;
|
||||
TGetHostByAddr = function(addr: Pointer; len, Struc: Integer): PHostEnt; stdcall;
|
||||
TGetHostName = function(name: PChar; len: Integer): Integer; stdcall;
|
||||
TShutdown = function(s: TSocket; how: Integer): Integer; stdcall;
|
||||
TSetSockOpt = function(s: TSocket; level, optname: Integer;
|
||||
optval: PChar; optlen: Integer): Integer; stdcall;
|
||||
TGetSockOpt = function(s: TSocket; level, optname: Integer;
|
||||
optval: PChar; var optlen: Integer): Integer; stdcall;
|
||||
TSendTo = function(s: TSocket; var Buf;
|
||||
len, flags: Integer; var addrto: TSockAddr;
|
||||
tolen: Integer): Integer; stdcall;
|
||||
TSend = function(s: TSocket; var Buf;
|
||||
len, flags: Integer): Integer; stdcall;
|
||||
TRecv = function(s: TSocket;
|
||||
var Buf; len, flags: Integer): Integer; stdcall;
|
||||
TRecvFrom = function(s: TSocket;
|
||||
var Buf; len, flags: Integer; var from: TSockAddr;
|
||||
var fromlen: Integer): Integer; stdcall;
|
||||
Tntohs = function(netshort: u_short): u_short; stdcall;
|
||||
Tntohl = function(netlong: u_long): u_long; stdcall;
|
||||
TListen = function(s: TSocket; backlog: Integer): Integer; stdcall;
|
||||
TIoctlSocket = function(s: TSocket; cmd: DWORD;
|
||||
var arg: u_long): Integer; stdcall;
|
||||
TInet_ntoa = function(inaddr: TInAddr): PChar; stdcall;
|
||||
TInet_addr = function(cp: PChar): u_long; stdcall;
|
||||
Thtons = function(hostshort: u_short): u_short; stdcall;
|
||||
Thtonl = function(hostlong: u_long): u_long; stdcall;
|
||||
TGetSockName = function(s: TSocket; var name: TSockAddr;
|
||||
var namelen: Integer): Integer; stdcall;
|
||||
TGetPeerName = function(s: TSocket; var name: TSockAddr;
|
||||
var namelen: Integer): Integer; stdcall;
|
||||
TConnect = function(s: TSocket; var name: TSockAddr;
|
||||
namelen: Integer): Integer; stdcall;
|
||||
TCloseSocket = function(s: TSocket): Integer; stdcall;
|
||||
TBind = function(s: TSocket; var addr: TSockAddr;
|
||||
namelen: Integer): Integer; stdcall;
|
||||
TAccept = function(s: TSocket; addr: PSockAddr;
|
||||
addrlen: PInteger): TSocket; stdcall;
|
||||
TSocketProc = function(af, Struc, Protocol: Integer): TSocket; stdcall;
|
||||
TSelect = function(nfds: Integer; readfds, writefds, exceptfds: PFDSet;
|
||||
timeout: PTimeVal): Longint; stdcall;
|
||||
|
||||
var
|
||||
WSAStartup : TWSAStartup =nil;
|
||||
WSACleanup : TWSACleanup =nil;
|
||||
WSAGetLastError : TWSAGetLastError =nil;
|
||||
GetServByName : TGetServByName =nil;
|
||||
GetServByPort : TGetServByPort =nil;
|
||||
GetProtoByName : TGetProtoByName =nil;
|
||||
GetProtoByNumber : TGetProtoByNumber =nil;
|
||||
GetHostByName : TGetHostByName =nil;
|
||||
GetHostByAddr : TGetHostByAddr =nil;
|
||||
GetHostName : TGetHostName =nil;
|
||||
Shutdown : TShutdown =nil;
|
||||
SetSockOpt : TSetSockOpt =nil;
|
||||
GetSockOpt : TGetSockOpt =nil;
|
||||
SendTo : TSendTo =nil;
|
||||
Send : TSend =nil;
|
||||
Recv : TRecv =nil;
|
||||
RecvFrom : TRecvFrom =nil;
|
||||
ntohs : Tntohs =nil;
|
||||
ntohl : Tntohl =nil;
|
||||
Listen : TListen =nil;
|
||||
IoctlSocket : TIoctlSocket =nil;
|
||||
Inet_ntoa : TInet_ntoa =nil;
|
||||
Inet_addr : TInet_addr =nil;
|
||||
htons : Thtons =nil;
|
||||
htonl : Thtonl =nil;
|
||||
GetSockName : TGetSockName =nil;
|
||||
GetPeerName : TGetPeerName =nil;
|
||||
Connect : TConnect =nil;
|
||||
CloseSocket : TCloseSocket =nil;
|
||||
Bind : TBind =nil;
|
||||
Accept : TAccept =nil;
|
||||
Socket : TSocketProc =nil;
|
||||
Select : TSelect =nil;
|
||||
WSAStartup: TWSAStartup = nil;
|
||||
WSACleanup: TWSACleanup = nil;
|
||||
WSAGetLastError: TWSAGetLastError = nil;
|
||||
GetServByName: TGetServByName = nil;
|
||||
GetServByPort: TGetServByPort = nil;
|
||||
GetProtoByName: TGetProtoByName = nil;
|
||||
GetProtoByNumber: TGetProtoByNumber = nil;
|
||||
GetHostByName: TGetHostByName = nil;
|
||||
GetHostByAddr: TGetHostByAddr = nil;
|
||||
GetHostName: TGetHostName = nil;
|
||||
Shutdown: TShutdown = nil;
|
||||
SetSockOpt: TSetSockOpt = nil;
|
||||
GetSockOpt: TGetSockOpt = nil;
|
||||
SendTo: TSendTo = nil;
|
||||
Send: TSend = nil;
|
||||
Recv: TRecv = nil;
|
||||
RecvFrom: TRecvFrom = nil;
|
||||
ntohs: Tntohs = nil;
|
||||
ntohl: Tntohl = nil;
|
||||
Listen: TListen = nil;
|
||||
IoctlSocket: TIoctlSocket = nil;
|
||||
Inet_ntoa: TInet_ntoa = nil;
|
||||
Inet_addr: TInet_addr = nil;
|
||||
htons: Thtons = nil;
|
||||
htonl: Thtonl = nil;
|
||||
GetSockName: TGetSockName = nil;
|
||||
GetPeerName: TGetPeerName = nil;
|
||||
Connect: TConnect = nil;
|
||||
CloseSocket: TCloseSocket = nil;
|
||||
Bind: TBind = nil;
|
||||
Accept: TAccept = nil;
|
||||
Socket: TSocketProc = nil;
|
||||
Select: TSelect = nil;
|
||||
|
||||
function InitSocketInterface(stack:string):Boolean;
|
||||
function DestroySocketInterface:Boolean;
|
||||
function InitSocketInterface(stack: string): Boolean;
|
||||
function DestroySocketInterface: Boolean;
|
||||
|
||||
{$IFDEF LINUX}
|
||||
function LSWSAStartup (wVersionRequired: Word; var WSData: TWSAData): Integer; stdcall;
|
||||
function LSWSACleanup : Integer; stdcall;
|
||||
function LSWSAGetLastError : Integer; stdcall;
|
||||
function LSGetServByName (name, proto: PChar): PServEnt; stdcall;
|
||||
function LSGetServByPort (port: Integer; proto: PChar): PServEnt; stdcall;
|
||||
function LSGetProtoByName (name: PChar): PProtoEnt; stdcall;
|
||||
function LSGetProtoByNumber (proto: Integer): PProtoEnt; stdcall;
|
||||
function LSGetHostByName (name: PChar): PHostEnt; stdcall;
|
||||
function LSGetHostByAddr (addr: Pointer; len, Struct: Integer): PHostEnt; stdcall;
|
||||
function LSGetHostName (name: PChar; len: Integer): Integer; stdcall;
|
||||
function LSShutdown (s: TSocket; how: Integer): Integer; stdcall;
|
||||
function LSSetSockOpt (s: TSocket; level, optname: Integer; optval: PChar; optlen: Integer): Integer; stdcall;
|
||||
function LSGetSockOpt (s: TSocket; level, optname: Integer; optval: PChar; var optlen: Integer): Integer; stdcall;
|
||||
function LSSendTo (s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr; tolen: Integer): Integer; stdcall;
|
||||
function LSSend (s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
|
||||
function LSRecv (s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
|
||||
function LSRecvFrom (s: TSocket; var Buf; len, flags: Integer; var from: TSockAddr; var fromlen: Integer): Integer; stdcall;
|
||||
function LSntohs (netshort: u_short): u_short; stdcall;
|
||||
function LSntohl (netlong: u_long): u_long; stdcall;
|
||||
function LSListen (s: TSocket; backlog: Integer): Integer; stdcall;
|
||||
function LSIoctlSocket (s: TSocket; cmd: DWORD; var arg: u_long): Integer; stdcall;
|
||||
function LSInet_ntoa (inaddr: TInAddr): PChar; stdcall;
|
||||
function LSInet_addr (cp: PChar): u_long; stdcall;
|
||||
function LShtons (hostshort: u_short): u_short; stdcall;
|
||||
function LShtonl (hostlong: u_long): u_long; stdcall;
|
||||
function LSGetSockName (s: TSocket; var name: TSockAddr; var namelen: Integer): Integer; stdcall;
|
||||
function LSGetPeerName (s: TSocket; var name: TSockAddr; var namelen: Integer): Integer; stdcall;
|
||||
function LSConnect (s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
|
||||
function LSCloseSocket (s: TSocket): Integer; stdcall;
|
||||
function LSBind (s: TSocket; var addr: TSockAddr; namelen: Integer): Integer; stdcall;
|
||||
function LSAccept (s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket; stdcall;
|
||||
function LSSocketProc (af, Struct, protocol: Integer): TSocket; stdcall;
|
||||
function LSSelect (nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint; stdcall;
|
||||
function LSWSAStartup(wVersionRequired: Word; var WSData: TWSAData): Integer; stdcall;
|
||||
function LSWSACleanup: Integer; stdcall;
|
||||
function LSWSAGetLastError: Integer; stdcall;
|
||||
function LSGetServByName(name, proto: PChar): PServEnt; stdcall;
|
||||
function LSGetServByPort(port: Integer; proto: PChar): PServEnt; stdcall;
|
||||
function LSGetProtoByName(name: PChar): PProtoEnt; stdcall;
|
||||
function LSGetProtoByNumber(proto: Integer): PProtoEnt; stdcall;
|
||||
function LSGetHostByName(name: PChar): PHostEnt; stdcall;
|
||||
function LSGetHostByAddr(addr: Pointer; len, Struc: Integer): PHostEnt; stdcall;
|
||||
function LSGetHostName(name: PChar; len: Integer): Integer; stdcall;
|
||||
function LSShutdown(s: TSocket; how: Integer): Integer; stdcall;
|
||||
function LSSetSockOpt(s: TSocket; level, optname: Integer; optval: PChar;
|
||||
optlen: Integer): Integer; stdcall;
|
||||
function LSGetSockOpt(s: TSocket; level, optname: Integer; optval: PChar;
|
||||
var optlen: Integer): Integer; stdcall;
|
||||
function LSSendTo(s: TSocket; var Buf; len, flags: Integer;
|
||||
var addrto: TSockAddr; tolen: Integer): Integer; stdcall;
|
||||
function LSSend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
|
||||
function LSRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
|
||||
function LSRecvFrom(s: TSocket; var Buf; len, flags: Integer;
|
||||
var from: TSockAddr; var fromlen: Integer): Integer; stdcall;
|
||||
function LSntohs(netshort: u_short): u_short; stdcall;
|
||||
function LSntohl(netlong: u_long): u_long; stdcall;
|
||||
function LSListen(s: TSocket; backlog: Integer): Integer; stdcall;
|
||||
function LSIoctlSocket(s: TSocket; cmd: DWORD; var arg: u_long): Integer; stdcall;
|
||||
function LSInet_ntoa(inaddr: TInAddr): PChar; stdcall;
|
||||
function LSInet_addr(cp: PChar): u_long; stdcall;
|
||||
function LShtons(hostshort: u_short): u_short; stdcall;
|
||||
function LShtonl(hostlong: u_long): u_long; stdcall;
|
||||
function LSGetSockName(s: TSocket; var name: TSockAddr;
|
||||
var namelen: Integer): Integer; stdcall;
|
||||
function LSGetPeerName(s: TSocket; var name: TSockAddr;
|
||||
var namelen: Integer): Integer; stdcall;
|
||||
function LSConnect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
|
||||
function LSCloseSocket(s: TSocket): Integer; stdcall;
|
||||
function LSBind(s: TSocket; var addr: TSockAddr; namelen: Integer): Integer; stdcall;
|
||||
function LSAccept(s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket; stdcall;
|
||||
function LSSocketProc(af, Struc, Protocol: Integer): TSocket; stdcall;
|
||||
function LSSelect(nfds: Integer; readfds, writefds, exceptfds: PFDSet;
|
||||
timeout: PTimeVal): Longint; stdcall;
|
||||
{$ENDIF}
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
{$IFDEF LINUX}
|
||||
function LSWSAStartup (wVersionRequired: Word; var WSData: TWSAData): Integer;
|
||||
|
||||
function LSWSAStartup(wVersionRequired: Word; var WSData: TWSAData): Integer;
|
||||
begin
|
||||
WSData.wVersion:=wVersionRequired;
|
||||
WSData.wHighVersion:=$101;
|
||||
WSData.szDescription:='Synapse Platform Independent Socket Layer';
|
||||
WSData.szSystemStatus:='On Linux';
|
||||
WSData.iMaxSockets:=32768;
|
||||
WSData.iMaxUdpDg:=8192;
|
||||
result:=0;
|
||||
with WSData do
|
||||
begin
|
||||
wVersion := wVersionRequired;
|
||||
wHighVersion := $101;
|
||||
szDescription := 'Synapse Platform Independent Socket Layer';
|
||||
szSystemStatus := 'On Linux';
|
||||
iMaxSockets := 32768;
|
||||
iMaxUdpDg := 8192;
|
||||
end;
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
function LSWSACleanup : Integer;
|
||||
function LSWSACleanup: Integer;
|
||||
begin
|
||||
Result:=0;
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
function LSWSAGetLastError : Integer;
|
||||
function LSWSAGetLastError: Integer;
|
||||
begin
|
||||
result:=System.GetLastError;
|
||||
Result := System.GetLastError;
|
||||
end;
|
||||
|
||||
function LSGetServByName (name, proto: PChar): PServEnt;
|
||||
function LSGetServByName(name, proto: PChar): PServEnt;
|
||||
begin
|
||||
result:=libc.GetServByName(name,proto);
|
||||
Result := libc.GetServByName(name, proto);
|
||||
end;
|
||||
|
||||
function LSGetServByPort (port: Integer; proto: PChar): PServEnt;
|
||||
function LSGetServByPort(port: Integer; proto: PChar): PServEnt;
|
||||
begin
|
||||
result:=libc.GetServByPort(port,proto);
|
||||
Result := libc.GetServByPort(port, proto);
|
||||
end;
|
||||
|
||||
function LSGetProtoByName (name: PChar): PProtoEnt;
|
||||
function LSGetProtoByName(name: PChar): PProtoEnt;
|
||||
begin
|
||||
result:=libc.getprotobyname(Name);
|
||||
Result := libc.GetProtoByName(Name);
|
||||
end;
|
||||
|
||||
function LSGetProtoByNumber (proto: Integer): PProtoEnt;
|
||||
function LSGetProtoByNumber(proto: Integer): PProtoEnt;
|
||||
begin
|
||||
result:=libc.getprotobynumber(proto);
|
||||
Result := libc.GetProtoByNumber(proto);
|
||||
end;
|
||||
|
||||
function LSGetHostByName (name: PChar): PHostEnt;
|
||||
function LSGetHostByName(name: PChar): PHostEnt;
|
||||
begin
|
||||
result:=libc.GetHostByName(Name);
|
||||
Result := libc.GetHostByName(Name);
|
||||
end;
|
||||
|
||||
function LSGetHostByAddr (addr: Pointer; len, Struct: Integer): PHostEnt;
|
||||
function LSGetHostByAddr(addr: Pointer; len, Struc: Integer): PHostEnt;
|
||||
begin
|
||||
Result:=libc.GetHostByAddr(Addr,len,struct);
|
||||
Result := libc.GetHostByAddr(Addr, len, struc);
|
||||
end;
|
||||
|
||||
function LSGetHostName (name: PChar; len: Integer): Integer;
|
||||
function LSGetHostName(name: PChar; len: Integer): Integer;
|
||||
begin
|
||||
Result:=libc.GetHostName(Name,Len);
|
||||
Result := libc.GetHostName(Name, Len);
|
||||
end;
|
||||
|
||||
function LSShutdown (s: TSocket; how: Integer): Integer;
|
||||
function LSShutdown(s: TSocket; how: Integer): Integer;
|
||||
begin
|
||||
result:=libc.Shutdown(S,How);
|
||||
Result := libc.Shutdown(S, How);
|
||||
end;
|
||||
|
||||
function LSSetSockOpt (s: TSocket; level, optname: Integer; optval: PChar; optlen: Integer): Integer;
|
||||
function LSSetSockOpt(s: TSocket; level, optname: Integer; optval: PChar;
|
||||
optlen: Integer): Integer;
|
||||
begin
|
||||
result:=libc.SetSockOpt(S,Level,OptName,OptVal,OptLen);
|
||||
Result := libc.SetSockOpt(S, Level, OptName, OptVal, OptLen);
|
||||
end;
|
||||
|
||||
function LSGetSockOpt (s: TSocket; level, optname: Integer; optval: PChar; var optlen: Integer): Integer;
|
||||
function LSGetSockOpt(s: TSocket; level, optname: Integer; optval: PChar;
|
||||
var optlen: Integer): Integer;
|
||||
begin
|
||||
result:=libc.getsockopt(s,level,optname,optval,cardinal(optlen));
|
||||
Result := libc.getsockopt(s, level, optname, optval, cardinal(optlen));
|
||||
end;
|
||||
|
||||
function LSSendTo (s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr; tolen: Integer): Integer;
|
||||
function LSSendTo(s: TSocket; var Buf; len, flags: Integer;
|
||||
var addrto: TSockAddr; tolen: Integer): Integer;
|
||||
begin
|
||||
result:=libc.SendTo(S,Buf,Len,Flags,Addrto,Tolen);
|
||||
Result := libc.SendTo(S, Buf, Len, Flags, Addrto, Tolen);
|
||||
end;
|
||||
|
||||
function LSSend (s: TSocket; var Buf; len, flags: Integer): Integer;
|
||||
function LSSend(s: TSocket; var Buf; len, flags: Integer): Integer;
|
||||
begin
|
||||
result:=libc.Send(S,Buf,Len,Flags);
|
||||
Result := libc.Send(S, Buf, Len, Flags);
|
||||
end;
|
||||
|
||||
function LSRecv (s: TSocket; var Buf; len, flags: Integer): Integer;
|
||||
function LSRecv(s: TSocket; var Buf; len, flags: Integer): Integer;
|
||||
begin
|
||||
result:=libc.Recv(S,Buf,Len,Flags);
|
||||
Result := libc.Recv(S, Buf, Len, Flags);
|
||||
end;
|
||||
|
||||
function LSRecvFrom (s: TSocket; var Buf; len, flags: Integer; var from: TSockAddr; var fromlen: Integer): Integer;
|
||||
function LSRecvFrom(s: TSocket; var Buf; len, flags: Integer;
|
||||
var from: TSockAddr; var fromlen: Integer): Integer;
|
||||
begin
|
||||
result:=libc.RecvFrom(S,Buf,Len,Flags,@from,@fromlen);
|
||||
Result := libc.RecvFrom(S, Buf, Len, Flags, @from, @fromlen);
|
||||
end;
|
||||
|
||||
function LSntohs (netshort: u_short): u_short;
|
||||
function LSntohs(netshort: u_short): u_short;
|
||||
begin
|
||||
Result:=libc.NToHS(netshort);
|
||||
Result := libc.NToHS(netshort);
|
||||
end;
|
||||
|
||||
function LSntohl (netlong: u_long): u_long;
|
||||
function LSntohl(netlong: u_long): u_long;
|
||||
begin
|
||||
Result:=libc.NToHL(netlong);
|
||||
Result := libc.NToHL(netlong);
|
||||
end;
|
||||
|
||||
function LSListen (s: TSocket; backlog: Integer): Integer;
|
||||
function LSListen(s: TSocket; backlog: Integer): Integer;
|
||||
begin
|
||||
result:=libc.Listen(S,Backlog);
|
||||
Result := libc.Listen(S, Backlog);
|
||||
end;
|
||||
|
||||
function LSIoctlSocket (s: TSocket; cmd: DWORD; var arg: u_long): Integer;
|
||||
function LSIoctlSocket(s: TSocket; cmd: DWORD; var arg: u_long): Integer;
|
||||
begin
|
||||
result:=libc.ioctl(s,cmd,@arg);
|
||||
Result := libc.ioctl(s, cmd, @arg);
|
||||
end;
|
||||
|
||||
function LSInet_ntoa (inaddr: TInAddr): PChar;
|
||||
function LSInet_ntoa(inaddr: TInAddr): PChar;
|
||||
begin
|
||||
result:=libc.inet_ntoa(inaddr);
|
||||
Result := libc.inet_ntoa(inaddr);
|
||||
end;
|
||||
|
||||
function LSInet_addr (cp: PChar): u_long;
|
||||
function LSInet_addr(cp: PChar): u_long;
|
||||
begin
|
||||
result:=libc.inet_addr(cp);
|
||||
Result := libc.inet_addr(cp);
|
||||
end;
|
||||
|
||||
function LShtons (hostshort: u_short): u_short;
|
||||
function LShtons(hostshort: u_short): u_short;
|
||||
begin
|
||||
result:=libc.HToNs(HostShort);
|
||||
Result := libc.HToNs(HostShort);
|
||||
end;
|
||||
|
||||
function LShtonl (hostlong: u_long): u_long;
|
||||
function LShtonl(hostlong: u_long): u_long;
|
||||
begin
|
||||
Result:=libc.HToNL(HostLong);
|
||||
Result := libc.HToNL(HostLong);
|
||||
end;
|
||||
|
||||
function LSGetSockName (s: TSocket; var name: TSockAddr; var namelen: Integer): Integer;
|
||||
function LSGetSockName(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer;
|
||||
begin
|
||||
Result:=libc.GetSockName(S,Name,cardinal(namelen));
|
||||
Result := libc.GetSockName(S, Name, cardinal(namelen));
|
||||
end;
|
||||
|
||||
function LSGetPeerName (s: TSocket; var name: TSockAddr; var namelen: Integer): Integer;
|
||||
function LSGetPeerName(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer;
|
||||
begin
|
||||
Result:=libc.GetPeerName(S,Name,cardinal(namelen));
|
||||
Result := libc.GetPeerName(S, Name, cardinal(namelen));
|
||||
end;
|
||||
|
||||
function LSConnect (s: TSocket; var name: TSockAddr; namelen: Integer): Integer;
|
||||
function LSConnect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer;
|
||||
begin
|
||||
result:=libc.Connect(S,name,namelen);
|
||||
Result := libc.Connect(S, name, namelen);
|
||||
end;
|
||||
|
||||
function LSCloseSocket (s: TSocket): Integer;
|
||||
function LSCloseSocket(s: TSocket): Integer;
|
||||
begin
|
||||
result:=libc.__close(s);
|
||||
Result := libc.__close(s);
|
||||
end;
|
||||
|
||||
function LSBind (s: TSocket; var addr: TSockAddr; namelen: Integer): Integer;
|
||||
function LSBind(s: TSocket; var addr: TSockAddr; namelen: Integer): Integer;
|
||||
begin
|
||||
result:=libc.Bind(S,addr,namelen);
|
||||
Result := libc.Bind(S, addr, namelen);
|
||||
end;
|
||||
|
||||
function LSAccept (s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket;
|
||||
function LSAccept(s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket;
|
||||
begin
|
||||
result:=libc.Accept(S,addr,psocketlength(addrlen));
|
||||
Result := libc.Accept(S, addr, psocketlength(addrlen));
|
||||
end;
|
||||
|
||||
function LSSocketProc (af, Struct, protocol: Integer): TSocket;
|
||||
function LSSocketProc(af, Struc, Protocol: Integer): TSocket;
|
||||
begin
|
||||
result:=libc.Socket(Af,Struct,Protocol);
|
||||
Result := libc.Socket(Af, Struc, Protocol);
|
||||
end;
|
||||
|
||||
function LSSelect (nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint;
|
||||
function LSSelect(nfds: Integer; readfds, writefds, exceptfds: PFDSet;
|
||||
timeout: PTimeVal): Longint;
|
||||
begin
|
||||
Result:=libc.Select(nfds,readfds,writefds,exceptfds,timeout);
|
||||
Result := libc.Select(nfds, readfds, writefds, exceptfds, timeout);
|
||||
end;
|
||||
|
||||
{$ENDIF}
|
||||
|
||||
|
||||
function InitSocketInterface(stack:string):Boolean;
|
||||
function InitSocketInterface(stack: string): Boolean;
|
||||
begin
|
||||
{$IFDEF LINUX}
|
||||
Accept := LSAccept;
|
||||
@ -451,72 +461,71 @@ begin
|
||||
SetSockOpt := LSsetsockopt;
|
||||
ShutDown := LSshutdown;
|
||||
Socket := LSsocketProc;
|
||||
GetHostByAddr := LSgethostbyaddr;
|
||||
GetHostByName := LSgethostbyname;
|
||||
GetProtoByName := LSgetprotobyname;
|
||||
GetProtoByNumber := LSgetprotobynumber;
|
||||
GetServByName := LSgetservbyname;
|
||||
GetServByPort := LSgetservbyport;
|
||||
GetHostName := LSgethostname;
|
||||
GetHostByAddr := LSGetHostByAddr;
|
||||
GetHostByName := LSGetHostByName;
|
||||
GetProtoByName := LSGetProtoByName;
|
||||
GetProtoByNumber := LSGetProtoByNumber;
|
||||
GetServByName := LSGetServByName;
|
||||
GetServByPort := LSGetServByPort;
|
||||
GetHostName := LSGetHostName;
|
||||
WSAGetLastError := LSWSAGetLastError;
|
||||
WSAStartup := LSWSAStartup;
|
||||
WSACleanup := LSWSACleanup;
|
||||
Result:=True;
|
||||
Result := True;
|
||||
{$ELSE}
|
||||
Result:=False;
|
||||
if stack=''
|
||||
then stack:=DLLStackName;
|
||||
Result := False;
|
||||
if stack = '' then
|
||||
stack := DLLStackName;
|
||||
LibHandle := Windows.LoadLibrary(PChar(Stack));
|
||||
if LibHandle <> 0 then begin
|
||||
Accept := Windows.GetProcAddress (LibHandle, PChar('accept'));
|
||||
Bind := Windows.GetProcAddress (LibHandle, PChar('bind'));
|
||||
CloseSocket := Windows.GetProcAddress (LibHandle, PChar('closesocket'));
|
||||
Connect := Windows.GetProcAddress (LibHandle, PChar('connect'));
|
||||
GetPeerName := Windows.GetProcAddress (LibHandle, PChar('getpeername'));
|
||||
GetSockName := Windows.GetProcAddress (LibHandle, PChar('getsockname'));
|
||||
GetSockOpt := Windows.GetProcAddress (LibHandle, PChar('getsockopt'));
|
||||
Htonl := Windows.GetProcAddress (LibHandle, PChar('htonl'));
|
||||
Htons := Windows.GetProcAddress (LibHandle, PChar('htons'));
|
||||
Inet_Addr := Windows.GetProcAddress (LibHandle, PChar('inet_addr'));
|
||||
Inet_Ntoa := Windows.GetProcAddress (LibHandle, PChar('inet_ntoa'));
|
||||
IoctlSocket := Windows.GetProcAddress (LibHandle, PChar('ioctlsocket'));
|
||||
Listen := Windows.GetProcAddress (LibHandle, PChar('listen'));
|
||||
Ntohl := Windows.GetProcAddress (LibHandle, PChar('ntohl'));
|
||||
Ntohs := Windows.GetProcAddress (LibHandle, PChar('ntohs'));
|
||||
Recv := Windows.GetProcAddress (LibHandle, PChar('recv'));
|
||||
RecvFrom := Windows.GetProcAddress (LibHandle, PChar('recvfrom'));
|
||||
Select := Windows.GetProcAddress (LibHandle, PChar('select'));
|
||||
Send := Windows.GetProcAddress (LibHandle, PChar('send'));
|
||||
SendTo := Windows.GetProcAddress (LibHandle, PChar('sendto'));
|
||||
SetSockOpt := Windows.GetProcAddress (LibHandle, PChar('setsockopt'));
|
||||
ShutDown := Windows.GetProcAddress (LibHandle, PChar('shutdown'));
|
||||
Socket := Windows.GetProcAddress (LibHandle, PChar('socket'));
|
||||
GetHostByAddr := Windows.GetProcAddress (LibHandle, PChar('gethostbyaddr'));
|
||||
GetHostByName := Windows.GetProcAddress (LibHandle, PChar('gethostbyname'));
|
||||
GetProtoByName := Windows.GetProcAddress (LibHandle, PChar('getprotobyname'));
|
||||
GetProtoByNumber := Windows.GetProcAddress (LibHandle, PChar('getprotobynumber'));
|
||||
GetServByName := Windows.GetProcAddress (LibHandle, PChar('getservbyname'));
|
||||
GetServByPort := Windows.GetProcAddress (LibHandle, PChar('getservbyport'));
|
||||
GetHostName := Windows.GetProcAddress (LibHandle, PChar('gethostname'));
|
||||
WSAGetLastError := Windows.GetProcAddress (LibHandle, PChar('WSAGetLastError'));
|
||||
WSAStartup := Windows.GetProcAddress (LibHandle, PChar('WSAStartup'));
|
||||
WSACleanup := Windows.GetProcAddress (LibHandle, PChar('WSACleanup'));
|
||||
Result:=True;
|
||||
if LibHandle <> 0 then
|
||||
begin
|
||||
Accept := Windows.GetProcAddress(LibHandle, PChar('accept'));
|
||||
Bind := Windows.GetProcAddress(LibHandle, PChar('bind'));
|
||||
CloseSocket := Windows.GetProcAddress(LibHandle, PChar('closesocket'));
|
||||
Connect := Windows.GetProcAddress(LibHandle, PChar('connect'));
|
||||
GetPeerName := Windows.GetProcAddress(LibHandle, PChar('getpeername'));
|
||||
GetSockName := Windows.GetProcAddress(LibHandle, PChar('getsockname'));
|
||||
GetSockOpt := Windows.GetProcAddress(LibHandle, PChar('getsockopt'));
|
||||
Htonl := Windows.GetProcAddress(LibHandle, PChar('htonl'));
|
||||
Htons := Windows.GetProcAddress(LibHandle, PChar('htons'));
|
||||
Inet_Addr := Windows.GetProcAddress(LibHandle, PChar('inet_addr'));
|
||||
Inet_Ntoa := Windows.GetProcAddress(LibHandle, PChar('inet_ntoa'));
|
||||
IoctlSocket := Windows.GetProcAddress(LibHandle, PChar('ioctlsocket'));
|
||||
Listen := Windows.GetProcAddress(LibHandle, PChar('listen'));
|
||||
Ntohl := Windows.GetProcAddress(LibHandle, PChar('ntohl'));
|
||||
Ntohs := Windows.GetProcAddress(LibHandle, PChar('ntohs'));
|
||||
Recv := Windows.GetProcAddress(LibHandle, PChar('recv'));
|
||||
RecvFrom := Windows.GetProcAddress(LibHandle, PChar('recvfrom'));
|
||||
Select := Windows.GetProcAddress(LibHandle, PChar('select'));
|
||||
Send := Windows.GetProcAddress(LibHandle, PChar('send'));
|
||||
SendTo := Windows.GetProcAddress(LibHandle, PChar('sendto'));
|
||||
SetSockOpt := Windows.GetProcAddress(LibHandle, PChar('setsockopt'));
|
||||
ShutDown := Windows.GetProcAddress(LibHandle, PChar('shutdown'));
|
||||
Socket := Windows.GetProcAddress(LibHandle, PChar('socket'));
|
||||
GetHostByAddr := Windows.GetProcAddress(LibHandle, PChar('gethostbyaddr'));
|
||||
GetHostByName := Windows.GetProcAddress(LibHandle, PChar('gethostbyname'));
|
||||
GetProtoByName := Windows.GetProcAddress(LibHandle, PChar('getprotobyname'));
|
||||
GetProtoByNumber := Windows.GetProcAddress(LibHandle, PChar('getprotobynumber'));
|
||||
GetServByName := Windows.GetProcAddress(LibHandle, PChar('getservbyname'));
|
||||
GetServByPort := Windows.GetProcAddress(LibHandle, PChar('getservbyport'));
|
||||
GetHostName := Windows.GetProcAddress(LibHandle, PChar('gethostname'));
|
||||
WSAGetLastError := Windows.GetProcAddress(LibHandle, PChar('WSAGetLastError'));
|
||||
WSAStartup := Windows.GetProcAddress(LibHandle, PChar('WSAStartup'));
|
||||
WSACleanup := Windows.GetProcAddress(LibHandle, PChar('WSACleanup'));
|
||||
Result := True;
|
||||
end;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function DestroySocketInterface:Boolean;
|
||||
function DestroySocketInterface: Boolean;
|
||||
begin
|
||||
{$IFDEF LINUX}
|
||||
{$ELSE}
|
||||
if LibHandle <> 0 then begin
|
||||
if LibHandle <> 0 then
|
||||
Windows.FreeLibrary(libHandle);
|
||||
end;
|
||||
LibHandle := 0;
|
||||
{$ENDIF}
|
||||
Result:=True;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
|
Reference in New Issue
Block a user