?? winsock2.pas
字號:
WSA_FLAG_MULTIPOINT_D_LEAF =$10;
{ WinSock 2 extension -- manifest constants for WSAIoctl() }
IOC_UNIX =$00000000;
IOC_WS2 =$08000000;
IOC_PROTOCOL =$10000000;
IOC_VENDOR =$18000000;
SIO_ASSOCIATE_HANDLE = IOC_IN or IOC_WS2 or 1;
SIO_ENABLE_CIRCULAR_QUEUEING = IOC_VOID or IOC_WS2 or 2;
SIO_FIND_ROUTE = IOC_OUT or IOC_WS2 or 3;
SIO_FLUSH = IOC_VOID or IOC_WS2 or 4;
SIO_GET_BROADCAST_ADDRESS = IOC_OUT or IOC_WS2 or 5;
SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT or IOC_WS2 or 6;
SIO_GET_QOS = IOC_INOUT or IOC_WS2 or 7;
SIO_GET_GROUP_QOS = IOC_INOUT or IOC_WS2 or 8;
SIO_MULTIPOINT_LOOPBACK = IOC_IN or IOC_WS2 or 9;
SIO_MULTICAST_SCOPE = IOC_IN or IOC_WS2 or 10;
SIO_SET_QOS = IOC_IN or IOC_WS2 or 11;
SIO_SET_GROUP_QOS = IOC_IN or IOC_WS2 or 12;
SIO_TRANSLATE_HANDLE = IOC_INOUT or IOC_WS2 or 13;
{ WinSock 2 extension -- manifest constants for SIO_TRANSLATE_HANDLE ioctl }
TH_NETDEV = $00000001;
TH_TAPI = $00000002;
{ Microsoft Windows Extended data types required for the functions to
convert back and forth between binary and string forms of
addresses. }
type
SOCKADDR = TSockAddr; { AHS ?}
{ PSOCKADDR = PSockaddr;}
LPSOCKADDR = PSockaddr;
{ Manifest constants and type definitions related to name resolution and
registration (RNR) API }
PBLOB = ^TBLOB;
TBLOB = packed record
cbSize :ULONG;
pBlobData :^byte;
end;
{ Service Install Flags }
const
SERVICE_MULTIPLE =$00000001;
{ Name Spaces }
NS_ALL = 0;
NS_SAP = 1;
NS_NDS = 2;
NS_PEER_BROWSE = 3;
NS_TCPIP_LOCAL = 10;
NS_TCPIP_HOSTS = 11;
NS_DNS = 12;
NS_NETBT = 13;
NS_WINS = 14;
NS_NBP = 20;
NS_MS = 30;
NS_STDA = 31;
NS_NTDS = 32;
NS_X500 = 40;
NS_NIS = 41;
NS_NISPLUS = 42;
NS_WRQ = 50;
{ Resolution flags for WSAGetAddressByName().
Note these are also used by the 1.1 API GetAddressByName, so
leave them around. }
RES_UNUSED_1 =$00000001;
RES_FLUSH_CACHE =$00000002;
RES_SERVICE =$00000004;
{ Well known value names for Service Types }
SERVICE_TYPE_VALUE_IPXPORTA ='IpxSocket';
SERVICE_TYPE_VALUE_IPXPORTW = 'IpxSocket';
SERVICE_TYPE_VALUE_SAPIDA = 'SapId';
SERVICE_TYPE_VALUE_SAPIDW ='SapId';
SERVICE_TYPE_VALUE_TCPPORTA = 'TcpPort';
SERVICE_TYPE_VALUE_TCPPORTW ='TcpPort';
SERVICE_TYPE_VALUE_UDPPORTA = 'UdpPort';
SERVICE_TYPE_VALUE_UDPPORTW ='UdpPort';
SERVICE_TYPE_VALUE_OBJECTIDA = 'ObjectId';
SERVICE_TYPE_VALUE_OBJECTIDW ='ObjectId';
{$ifdef UNICODE}
SERVICE_TYPE_VALUE_SAPID =SERVICE_TYPE_VALUE_SAPIDW;
SERVICE_TYPE_VALUE_TCPPORT =SERVICE_TYPE_VALUE_TCPPORTW;
SERVICE_TYPE_VALUE_UDPPORT =SERVICE_TYPE_VALUE_UDPPORTW;
SERVICE_TYPE_VALUE_OBJECTID =SERVICE_TYPE_VALUE_OBJECTIDW;
{$else} { not UNICODE }
SERVICE_TYPE_VALUE_SAPID =SERVICE_TYPE_VALUE_SAPIDA;
SERVICE_TYPE_VALUE_TCPPORT =SERVICE_TYPE_VALUE_TCPPORTA;
SERVICE_TYPE_VALUE_UDPPORT =SERVICE_TYPE_VALUE_UDPPORTA;
SERVICE_TYPE_VALUE_OBJECTID =SERVICE_TYPE_VALUE_OBJECTIDA;
{$endif}
{ SockAddr Information }
type
PSOCKET_ADDRESS = ^TSOCKET_ADDRESS;
TSOCKET_ADDRESS = packed record
lpSockaddr : PSOCKADDR ;
iSockaddrLength : u_int;
end;
{ CSAddr Information }
PCSADDR_INFO = ^TCSADDR_INFO;
TCSADDR_INFO = packed record
LocalAddr :TSOCKET_ADDRESS;
RemoteAddr :TSOCKET_ADDRESS;
iSocketType :u_int;
iProtocol :u_int;
end;
{ Address Family/Protocol Tuples }
PAFPROTOCOLS = ^TAFPROTOCOLS;
TAFPROTOCOLS = packed record
iAddressFamily :u_int;
iProtocol :u_int;
end;
{ Client Query API Typedefs }
{ The comparators }
PWSAEcomparator = ^TWSAEcomparator;
TWSAEcomparator = (
COMP_EQUAL,
COMP_NOTLESS
);
PWSAVersion = ^TWSAVersion;
TWSAVersion = packed record
dwVersion : Dword;
ecHow : TWSAEComparator;
end;
PWSAQuerySetA = ^TWSAQuerySetA;
TWSAQuerySetA = packed record
dwSize : DWord;
lpszServiceInstanceName : PChar;
lpServiceClassId : PGUID;
lpVersion : PWSAVERSION;
lpszComment : PChar;
dwNameSpace : DWord;
lpNSProviderId : PGUID;
lpszContext : PChar;
dwNumberOfProtocols : DWORD;
lpafpProtocols : PAFPROTOCOLS;
lpszQueryString : PChar;
dwNumberOfCsAddrs : Dword;
lpcsaBuffer : PCSADDR_INFO;
dwOutputFlags : DWord;
lpBlob : PBLOB;
end;
PWSAQuerySetW = ^TWSAQuerySetW;
TWSAQuerySetW = packed record
dwSize : DWord;
lpszServiceInstanceName : PWideChar; //MIO, antes WideChar
lpServiceClassId : PGUID;
lpVersion : PWSAVERSION;
lpszComment : PWideChar; //MIO, antes WideChar
dwNameSpace : DWord;
lpNSProviderId : PGUID;
lpszContext : PWideChar; //MIO, antes WideChar
dwNumberOfProtocols : DWORD;
lpafpProtocols : PAFPROTOCOLS;
lpszQueryString : PWideChar; //MIO, antes WideChar
dwNumberOfCsAddrs : Dword;
lpcsaBuffer : PCSADDR_INFO;
dwOutputFlags : DWord;
lpBlob : PBLOB;
end;
{$ifdef UNICODE}
WSAQUERYSET = TWSAQUERYSETW;
PWSAQUERYSET = PWSAQUERYSETW;
{$else}
WSAQUERYSET = TWSAQUERYSETA;
PWSAQUERYSET = PWSAQUERYSETA;
{$endif }
const
LUP_DEEP = $0001;
LUP_CONTAINERS = $0002;
LUP_NOCONTAINERS = $0004;
LUP_NEAREST = $0008;
LUP_RETURN_NAME = $0010;
LUP_RETURN_TYPE = $0020;
LUP_RETURN_VERSION = $0040;
LUP_RETURN_COMMENT = $0080;
LUP_RETURN_ADDR = $0100;
LUP_RETURN_BLOB = $0200;
LUP_RETURN_ALIASES = $0400;
LUP_RETURN_QUERY_STRING = $0800;
LUP_RETURN_ALL = $0FF0;
LUP_RES_SERVICE = $8000;
LUP_FLUSHCACHE = $1000;
LUP_FLUSHPREVIOUS = $2000;
{ Return flags }
RESULT_IS_ALIAS = $0001;
{ Service Address Registration and Deregistration Data Types. }
type
PWSAESETSERVICEOP = ^TWSAESETSERVICEOP;
TWSAESETSERVICEOP = (
RNRSERVICE_REGISTER,
RNRSERVICE_DEREGISTER,
RNRSERVICE_Delete
);
{ Service Installation/Removal Data Types. }
PWSANSClassInfoA = ^TWSANSClassInfoA;
TWSANSClassInfoA = packed record
lpszName : PChar;
dwNameSpace : Dword;
dwValueType : Dword;
dwValueSize : Dword;
lpValue : Pointer;
end;
PWSANSClassInfoW = ^TWSANSClassInfoW;
TWSANSClassInfoW = packed record
lpszName : WideChar;
dwNameSpace : Dword;
dwValueType : Dword;
dwValueSize : Dword;
lpValue : Pointer;
end;
{$ifdef UNICODE }
TWSANSCLASSINFO = TWSANSCLASSINFOW;
PWSANSCLASSINFO = PWSANSCLASSINFOW;
{$else}
TWSANSCLASSINFO = TWSANSCLASSINFOA;
PWSANSCLASSINFO = PWSANSCLASSINFOA;
{$endif UNICODE}
PWSAServiceClassInfoA = ^TWSAServiceClassInfoA;
TWSAServiceClassInfoA = packed record
lpServiceClassId : PGUID;
lpszServiceClassName : PChar;
dwCount : DWord;
lpClassInfos : PWSANSCLASSINFOA;
end;
PWSAServiceClassInfoW = ^TWSAServiceClassInfoW;
TWSAServiceClassInfoW = packed record
lpServiceClassId : PGUID;
lpszServiceClassName : WideChar;
dwCount : DWord;
lpClassInfos : PWSANSCLASSINFOW;
end;
{$ifdef UNICODE}
TWSASERVICECLASSINFO = TWSASERVICECLASSINFOW;
PWSASERVICECLASSINFO = PWSASERVICECLASSINFOW;
{$else}
TWSASERVICECLASSINFO = TWSASERVICECLASSINFOA;
PWSASERVICECLASSINFO = PWSASERVICECLASSINFOA;
{$endif UNICODE}
PWSANAMESPACE_INFOA = ^TWSANAMESPACE_INFOA;
TWSANAMESPACE_INFOA = packed record
NSProviderId : TGUID;
dwNameSpace : DWord;
fActive : BOOL;
dwVersion : DWord;
lpszIdentifier : PChar;
end;
PWSANAMESPACE_INFOW = ^TWSANAMESPACE_INFOW;
TWSANAMESPACE_INFOW = packed record
NSProviderId : TGUID;
dwNameSpace : DWord;
fActive : BOOL;
dwVersion : DWord;
lpszIdentifier : WideChar;
end;
{$ifdef UNICODE}
TWSANAMESPACE_INFO = TWSANAMESPACE_INFOW;
PWSANAMESPACE_INFO = PWSANAMESPACE_INFOW;
{$else}
TWSANAMESPACE_INFO = TWSANAMESPACE_INFOA;
PWSANAMESPACE_INFO = PWSANAMESPACE_INFOA;
{$endif UNICODE}
{ AHS END }
{ Socket function prototypes }
// Using "var addr:TSockAddr" in accept makes impossible to compile for IPv6
function accept(s: TSocket; addr: PSockAddr; var addrlen: Integer): TSocket; stdcall;
// Using "var addr:TSockAddr" in bind makes impossible to compile for IPv6
function bind(s: TSocket; addr: PSockAddr; namelen: Integer): Integer; stdcall;
function closesocket(s: TSocket): Integer; stdcall;
// Using "var addr:TSockAddr" in connect makes impossible to compile for IPv6
function connect(s: TSocket; name: PSockAddr; namelen: Integer): Integer; stdcall;
function ioctlsocket(s: TSocket; cmd: Longint; var arg: u_long): Integer; stdcall;
function getpeername(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer; stdcall;
// Using "var addr:TSockAddr" in getsockname makes impossible to compile for IPv6
function getsockname(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall;
function getsockopt(s: TSocket; level, optname: Integer; optval: PChar; var optlen: Integer): Integer; stdcall;
function htonl(hostlong: u_long): u_long; stdcall;
function htons(hostshort: u_short): u_short; stdcall;
function inet_addr(cp: PChar): u_long; stdcall; {PInAddr;} { TInAddr }
function inet_ntoa(inaddr: TInAddr): PChar; stdcall;
function listen(s: TSocket; backlog: Integer): Integer; stdcall;
function ntohl(netlong: u_long): u_long; stdcall;
function ntohs(netshort: u_short): u_short; stdcall;
function recv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
// Using "var from: TSockAddr" in recvfrom makes impossible to compile for IPv6
function recvfrom(s: TSocket; var Buf; len, flags: Integer;
from: PSockAddr; var fromlen: Integer): Integer; stdcall;
function select(nfds: Integer; readfds, writefds, exceptfds: PFDSet;
timeout: PTimeVal): Longint; stdcall;
function send(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
// Using "var addrto: TSockAddr" in sendto makes impossible to compile for IPv6
function sendto(s: TSocket; var Buf; len, flags: Integer; addrto: PSockAddr;
tolen: Integer): Integer; stdcall;
function setsockopt(s: TSocket; level, optname: Integer; optval: PChar;
optlen: Integer): Integer; stdcall;
function shutdown(s: TSocket; how: Integer): Integer; stdcall;
function socket(af, struct, protocol: Integer): TSocket; stdcall;
function gethostbyaddr(addr: Pointer; len, struct: Integer): PHostEnt; stdcall;
function gethostbyname(name: PChar): PHostEnt; stdcall;
function gethostname(name: PChar; len: Integer): Integer; stdcall;
function getservbyport(port: Integer; proto: PChar): PServEnt; stdcall;
function getservbyname(name, proto: PChar): PServEnt; stdcall;
function getprotobynumber(proto: Integer): PProtoEnt; stdcall;
function getprotobyname(name: PChar): PProtoEnt; stdcall;
function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer; stdcall;
function WSACleanup: Integer; stdcall;
procedure WSASetLastError(iError: Integer); stdcall;
function WSAGetLastError: Integer; stdcall;
function WSAIsBlocking: BOOL; stdcall;
function WSAUnhookBlockingHook: Integer; stdcall;
function WSASetBlockingHook(lpBlockFunc: TFarProc): TFarProc; stdcall;
function WSACancelBlockingCall: Integer; stdcall;
function WSAAsyncGetServByName(HWindow: HWND; wMsg: u_int;
name, proto, buf: PChar; buflen: Integer): THandle; stdcall;
function WSAAsyncGetServByPort( HWindow: HWND; wMsg, port: u_int;
proto, buf: PChar; buflen: Integer): THandle; stdcall;
function WSAAsyncGetProtoByName(HWindow: HWND; wMsg: u_int;
name, buf: PChar; buflen: Integer): THandle; stdcall;
function WSAAsyncGetProtoByNumber(HWindow: HWND; wMsg: u_int; number: Integer;
buf: PChar; buflen: Integer): THandle; stdcall;
function WSAAsyncGetHostByName(HWindow: HWND; wMsg: u_int;
name, buf: PChar; buflen: Integer): THandle; stdcall;
function WSAAsyncGetHostByAddr(HWindow: HWND; wMsg: u_int; addr: PChar;
len, struct: Integer; buf: PChar; buflen: Integer): THandle; stdcall;
function WSACancelAsyncRequest(hAsyncTaskHandle: THandle): Integer; stdcall;
function WSAAsyncSelect(s: TSocket; HWindow: HWND; wMsg: u_int; lEvent: Longint): Integer; stdcall;
{ WinSock 2 extensions -- data types for the condition function in
WSAAccept() and overlapped I/O completion routine. }
type
PCONDITIONPROC = function ( lpCallerId:PWSABUF; lpCallerData:PWSABUF;
lpSQOS:PQOS; lpGQOS:PQOS; lpCalleeId:PWSABUF;lpCalleeData:PWSABUF;
g:PGroup; dwCallbackData:DWord) :u_int; stdcall;
PWSAOVERLAPPED_COMPLETION_ROUTINE = procedure ( dwError :Dword;
cbTransferred: DWORD; lpOverlapped: LPWSAOVERLAPPED; dwFlags: Dword
); stdcall;
{ WinSock 2 API new function prototypes }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -