📄 winsock2.pas
字号:
function WSALookupServiceBeginW(var qsRestrictions: TWSAQuerySetW; const
dwControlFlags: DWORD; var hLookup: THANDLE): Integer; stdcall;
function WSALookupServiceBegin(var qsRestrictions: TWSAQuerySet; const
dwControlFlags: DWORD; var hLookup: THANDLE): Integer; stdcall;
function WSALookupServiceNextA(const hLookup: THandle; const dwControlFlags:
DWORD; var dwBufferLength: DWORD; lpqsResults: PWSAQuerySetA): Integer; stdcall;
function WSALookupServiceNextW(const hLookup: THandle; const dwControlFlags:
DWORD; var dwBufferLength: DWORD; lpqsResults: PWSAQuerySetW): Integer; stdcall;
function WSALookupServiceNext(const hLookup: THandle; const dwControlFlags:
DWORD; var dwBufferLength: DWORD; lpqsResults: PWSAQuerySet): Integer; stdcall;
function WSALookupServiceEnd(const hLookup: THandle): Integer; stdcall;
function WSAInstallServiceClassA(const lpServiceClassInfo:
LPWSAServiceClassInfoA): Integer; stdcall;
function WSAInstallServiceClassW(const lpServiceClassInfo:
LPWSAServiceClassInfoW): Integer; stdcall;
function WSAInstallServiceClass(const lpServiceClassInfo:
LPWSAServiceClassInfo): Integer; stdcall;
function WSARemoveServiceClass(const lpServiceClassId: PGUID): Integer; stdcall;
function WSAGetServiceClassInfoA(const lpProviderId: PGUID; const
lpServiceClassId: PGUID; var lpdwBufSize: DWORD;
lpServiceClassInfo: LPWSAServiceClassInfoA): Integer; stdcall;
function WSAGetServiceClassInfoW(const lpProviderId: PGUID; const
lpServiceClassId: PGUID; var lpdwBufSize: DWORD;
lpServiceClassInfo: LPWSAServiceClassInfoW): Integer; stdcall;
function WSAGetServiceClassInfo(const lpProviderId: PGUID; const
lpServiceClassId: PGUID; var lpdwBufSize: DWORD;
lpServiceClassInfo: LPWSAServiceClassInfo): Integer; stdcall;
function WSAEnumNameSpaceProvidersA(var lpdwBufferLength: DWORD; const
lpnspBuffer: LPWSANameSpace_InfoA): Integer; stdcall;
function WSAEnumNameSpaceProvidersW(var lpdwBufferLength: DWORD; const
lpnspBuffer: LPWSANameSpace_InfoW): Integer; stdcall;
function WSAEnumNameSpaceProviders(var lpdwBufferLength: DWORD; const
lpnspBuffer: LPWSANameSpace_Info): Integer; stdcall;
function WSAGetServiceClassNameByClassIdA(const lpServiceClassId: PGUID;
lpszServiceClassName: PChar;
var lpdwBufferLength: DWORD): Integer; stdcall;
function WSAGetServiceClassNameByClassIdW(const lpServiceClassId: PGUID;
lpszServiceClassName: PWideChar;
var lpdwBufferLength: DWORD): Integer; stdcall;
function WSAGetServiceClassNameByClassId(const lpServiceClassId: PGUID;
lpszServiceClassName: PMBChar;
var lpdwBufferLength: DWORD): Integer; stdcall;
function WSASetServiceA(const lpqsRegInfo: LPWSAQuerySetA; const essoperation:
TWSAeSetServiceOp;
const dwControlFlags: DWORD): Integer; stdcall;
function WSASetServiceW(const lpqsRegInfo: LPWSAQuerySetW; const essoperation:
TWSAeSetServiceOp;
const dwControlFlags: DWORD): Integer; stdcall;
function WSASetService(const lpqsRegInfo: LPWSAQuerySet; const essoperation:
TWSAeSetServiceOp;
const dwControlFlags: DWORD): Integer; stdcall;
function WSAProviderConfigChange(var lpNotificationHandle: THandle;
lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine:
LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
{ Macros }
function WSAMakeSyncReply(Buflen, Error: Word): Longint;
function WSAMakeSelectReply(Event, Error: Word): Longint;
function WSAGetAsyncBuflen(Param: Longint): Word;
function WSAGetAsyncError(Param: Longint): Word;
function WSAGetSelectEvent(Param: Longint): Word;
function WSAGetSelectError(Param: Longint): Word;
procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet);
function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;
procedure FD_SET(Socket: TSocket; var FDSet: TFDSet);
procedure FD_ZERO(var FDSet: TFDSet);
{$INCLUDE ws2tcpip.inc}
{$INCLUDE wsipx.inc}
{$INCLUDE wsnwlink.inc}
{$INCLUDE wsnetbs.inc}
//=============================================================
implementation
//=============================================================
function accept; external WINSOCK2_DLL name 'accept';
function bind; external WINSOCK2_DLL name 'bind';
function closesocket; external WINSOCK2_DLL name 'closesocket';
function connect; external WINSOCK2_DLL name 'connect';
function ioctlsocket; external WINSOCK2_DLL name 'ioctlsocket';
function getpeername; external WINSOCK2_DLL name 'getpeername';
function getsockname; external WINSOCK2_DLL name 'getsockname';
function getsockopt; external WINSOCK2_DLL name 'getsockopt';
function htonl; external WINSOCK2_DLL name 'htonl';
function htons; external WINSOCK2_DLL name 'htons';
function inet_addr; external WINSOCK2_DLL name 'inet_addr';
function inet_ntoa; external WINSOCK2_DLL name 'inet_ntoa';
function listen; external WINSOCK2_DLL name 'listen';
function ntohl; external WINSOCK2_DLL name 'ntohl';
function ntohs; external WINSOCK2_DLL name 'ntohs';
function recv; external WINSOCK2_DLL name 'recv';
function recvfrom; external WINSOCK2_DLL name 'recvfrom';
function select; external WINSOCK2_DLL name 'select';
function send; external WINSOCK2_DLL name 'send';
function sendto; external WINSOCK2_DLL name 'sendto';
function setsockopt; external WINSOCK2_DLL name 'setsockopt';
function shutdown; external WINSOCK2_DLL name 'shutdown';
function socket; external WINSOCK2_DLL name 'socket';
function gethostbyaddr; external WINSOCK2_DLL name 'gethostbyaddr';
function gethostbyname; external WINSOCK2_DLL name 'gethostbyname';
function gethostname; external WINSOCK2_DLL name 'gethostname';
function getservbyport; external WINSOCK2_DLL name 'getservbyport';
function getservbyname; external WINSOCK2_DLL name 'getservbyname';
function getprotobynumber; external WINSOCK2_DLL name 'getprotobynumber';
function getprotobyname; external WINSOCK2_DLL name 'getprotobyname';
function WSAStartup; external WINSOCK2_DLL name 'WSAStartup';
function WSACleanup; external WINSOCK2_DLL name 'WSACleanup';
procedure WSASetLastError; external WINSOCK2_DLL name 'WSASetLastError';
function WSAGetLastError; external WINSOCK2_DLL name 'WSAGetLastError';
function WSAIsBlocking; external WINSOCK2_DLL name 'WSAIsBlocking';
function WSAUnhookBlockingHook; external WINSOCK2_DLL name
'WSAUnhookBlockingHook';
function WSASetBlockingHook; external WINSOCK2_DLL name 'WSASetBlockingHook';
function WSACancelBlockingCall; external WINSOCK2_DLL name
'WSACancelBlockingCall';
function WSAAsyncGetServByName; external WINSOCK2_DLL name
'WSAAsyncGetServByName';
function WSAAsyncGetServByPort; external WINSOCK2_DLL name
'WSAAsyncGetServByPort';
function WSAAsyncGetProtoByName; external WINSOCK2_DLL name
'WSAAsyncGetProtoByName';
function WSAAsyncGetProtoByNumber; external WINSOCK2_DLL name
'WSAAsyncGetProtoByNumber';
function WSAAsyncGetHostByName; external WINSOCK2_DLL name
'WSAAsyncGetHostByName';
function WSAAsyncGetHostByAddr; external WINSOCK2_DLL name
'WSAAsyncGetHostByAddr';
function WSACancelAsyncRequest; external WINSOCK2_DLL name
'WSACancelAsyncRequest';
function WSAAsyncSelect; external WINSOCK2_DLL name 'WSAAsyncSelect';
function __WSAFDIsSet; external WINSOCK2_DLL name '__WSAFDIsSet';
{ WinSock 2 API new function prototypes }
function WSAAccept; external WINSOCK2_DLL name 'WSAAccept';
function WSACloseEvent; external WINSOCK2_DLL name 'WSACloseEvent';
function WSAConnect; external WINSOCK2_DLL name 'WSAConnect';
function WSACreateEvent; external WINSOCK2_DLL name 'WSACreateEvent';
function WSADuplicateSocketA; external WINSOCK2_DLL name 'WSADuplicateSocketA';
function WSADuplicateSocketW; external WINSOCK2_DLL name 'WSADuplicateSocketW';
function WSAEnumNetworkEvents; external WINSOCK2_DLL name
'WSAEnumNetworkEvents';
function WSAEnumProtocolsA; external WINSOCK2_DLL name 'WSAEnumProtocolsA';
function WSAEnumProtocolsW; external WINSOCK2_DLL name 'WSAEnumProtocolsW';
function WSAEventSelect; external WINSOCK2_DLL name 'WSAEventSelect';
function WSAGetOverlappedResult; external WINSOCK2_DLL name
'WSAGetOverlappedResult';
function WSAGetQosByName; external WINSOCK2_DLL name 'WSAGetQosByName';
function WSAhtonl; external WINSOCK2_DLL name 'WSAhtonl';
function WSAhtons; external WINSOCK2_DLL name 'WSAhtons';
function WSAIoctl; external WINSOCK2_DLL name 'WSAIoctl';
function WSAJoinLeaf; external WINSOCK2_DLL name 'WSAJoinLeaf';
function WSANtohl; external WINSOCK2_DLL name 'WSANtohl';
function WSANtohs; external WINSOCK2_DLL name 'WSANtohs';
function WSARecv; external WINSOCK2_DLL name 'WSARecv';
function WSARecvDisconnect; external WINSOCK2_DLL name 'WSARecvDisconnect';
function WSARecvFrom; external WINSOCK2_DLL name 'WSARecvFrom';
function WSAResetEvent; external WINSOCK2_DLL name 'WSAResetEvent';
function WSASend; external WINSOCK2_DLL name 'WSASend';
function WSASendDisconnect; external WINSOCK2_DLL name 'WSASendDisconnect';
function WSASendTo; external WINSOCK2_DLL name 'WSASendTo';
function WSASetEvent; external WINSOCK2_DLL name 'WSASetEvent';
function WSASocketA; external WINSOCK2_DLL name 'WSASocketA';
function WSASocketW; external WINSOCK2_DLL name 'WSASocketW';
function WSAWaitForMultipleEvents; external WINSOCK2_DLL name
'WSAWaitForMultipleEvents';
function WSAAddressToStringA; external WINSOCK2_DLL name 'WSAAddressToStringA';
function WSAAddressToStringW; external WINSOCK2_DLL name 'WSAAddressToStringW';
function WSAStringToAddressA; external WINSOCK2_DLL name 'WSAStringToAddressA';
function WSAStringToAddressW; external WINSOCK2_DLL name 'WSAStringToAddressW';
{ Registration and Name Resolution API functions }
function WSALookupServiceBeginA; external WINSOCK2_DLL name
'WSALookupServiceBeginA';
function WSALookupServiceBeginW; external WINSOCK2_DLL name
'WSALookupServiceBeginW';
function WSALookupServiceNextA; external WINSOCK2_DLL name
'WSALookupServiceNextA';
function WSALookupServiceNextW; external WINSOCK2_DLL name
'WSALookupServiceNextW';
function WSALookupServiceEnd; external WINSOCK2_DLL name 'WSALookupServiceEnd';
function WSAInstallServiceClassA; external WINSOCK2_DLL name
'WSAInstallServiceClassA';
function WSAInstallServiceClassW; external WINSOCK2_DLL name
'WSAInstallServiceClassW';
function WSARemoveServiceClass; external WINSOCK2_DLL name
'WSARemoveServiceClass';
function WSAGetServiceClassInfoA; external WINSOCK2_DLL name
'WSAGetServiceClassInfoA';
function WSAGetServiceClassInfoW; external WINSOCK2_DLL name
'WSAGetServiceClassInfoW';
function WSAEnumNameSpaceProvidersA; external WINSOCK2_DLL name
'WSAEnumNameSpaceProvidersA';
function WSAEnumNameSpaceProvidersW; external WINSOCK2_DLL name
'WSAEnumNameSpaceProvidersW';
function WSAGetServiceClassNameByClassIdA; external WINSOCK2_DLL name
'WSAGetServiceClassNameByClassIdA';
function WSAGetServiceClassNameByClassIdW; external WINSOCK2_DLL name
'WSAGetServiceClassNameByClassIdW';
function WSASetServiceA; external WINSOCK2_DLL name 'WSASetServiceA';
function WSASetServiceW; external WINSOCK2_DLL name 'WSASetServiceW';
{$IFDEF UNICODE}
function WSADuplicateSocket; external WINSOCK2_DLL name 'WSADuplicateSocketW';
function WSAEnumProtocols; external WINSOCK2_DLL name 'WSAEnumProtocolsW';
function WSASocket; external WINSOCK2_DLL name 'WSASocketW';
function WSAAddressToString; external WINSOCK2_DLL name 'WSAAddressToStringW';
function WSAStringToAddress; external WINSOCK2_DLL name 'WSAStringToAddressW';
function WSALookupServiceBegin; external WINSOCK2_DLL name
'WSALookupServiceBeginW';
function WSALookupServiceNext; external WINSOCK2_DLL name
'WSALookupServiceNextW';
function WSAInstallServiceClass; external WINSOCK2_DLL name
'WSAInstallServiceClassW';
function WSAGetServiceClassInfo; external WINSOCK2_DLL name
'WSAGetServiceClassInfoW';
function WSAEnumNameSpaceProviders; external WINSOCK2_DLL name
'WSAEnumNameSpaceProvidersW';
function WSAGetServiceClassNameByClassId; external WINSOCK2_DLL name
'WSAGetServiceClassNameByClassIdW';
function WSASetService; external WINSOCK2_DLL name 'WSASetServiceW';
{$ELSE}
function WSADuplicateSocket; external WINSOCK2_DLL name 'WSADuplicateSocketA';
function WSAEnumProtocols; external WINSOCK2_DLL name 'WSAEnumProtocolsA';
function WSASocket; external WINSOCK2_DLL name 'WSASocketA';
function WSAAddressToString; external WINSOCK2_DLL name 'WSAAddressToStringA';
function WSAStringToAddress; external WINSOCK2_DLL name 'WSAStringToAddressA';
function WSALookupServiceBegin; external WINSOCK2_DLL name
'WSALookupServiceBeginA';
function WSALookupServiceNext; external WINSOCK2_DLL name
'WSALookupServiceNextA';
function WSAInstallServiceClass; external WINSOCK2_DLL name
'WSAInstallServiceClassA';
function WSAGetServiceClassInfo; external WINSOCK2_DLL name
'WSAGetServiceClassInfoA';
function WSAEnumNameSpaceProviders; external WINSOCK2_DLL name
'WSAEnumNameSpaceProvidersA';
function WSAGetServiceClassNameByClassId; external WINSOCK2_DLL name
'WSAGetServiceClassNameByClassIdA';
function WSASetService; external WINSOCK2_DLL name 'WSASetServiceA';
{$ENDIF}
function WSAProviderConfigChange; external WINSOCK2_DLL name
'WSAProviderConfigChange';
function WSAMakeSyncReply;
begin
WSAMakeSyncReply := MakeLong(Buflen, Error);
end;
function WSAMakeSelectReply;
begin
WSAMakeSelectReply := MakeLong(Event, Error);
end;
function WSAGetAsyncBuflen;
begin
WSAGetAsyncBuflen := LOWORD(Param);
end;
function WSAGetAsyncError;
begin
WSAGetAsyncError := HIWORD(Param);
end;
function WSAGetSelectEvent;
begin
WSAGetSelectEvent := LOWORD(Param);
end;
function WSAGetSelectError;
begin
WSAGetSelectError := HIWORD(Param);
end;
procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet);
var
i: DWORD;
begin
i := 0;
while i < FDSet.fd_count do
begin
if FDSet.fd_array[i] = Socket then
begin
while i < FDSet.fd_count - 1 do
begin
FDSet.fd_array[i] := FDSet.fd_array[i + 1];
Inc(i);
end;
Dec(FDSet.fd_count);
Break;
end;
Inc(i);
end;
end;
function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;
begin
Result := __WSAFDIsSet(Socket, FDSet);
end;
procedure FD_SET(Socket: TSocket; var FDSet: TFDSet);
begin
if FDSet.fd_count < FD_SETSIZE then
begin
FDSet.fd_array[FDSet.fd_count] := Socket;
Inc(FDSet.fd_count);
end;
end;
procedure FD_ZERO(var FDSet: TFDSet);
begin
FDSet.fd_count := 0;
end;
// A macro convenient for setting up NETBIOS SOCKADDRs.
procedure SET_NETBIOS_SOCKADDR(snb: PSOCKADDR_NB; const SnbType: Word; const
Name: PChar; const Port: Char);
var
len: Integer;
begin
if snb <> nil then
with snb^ do
begin
snb_family := AF_NETBIOS;
snb_type := SnbType;
len := StrLen(Name);
if len >= NETBIOS_NAME_LENGTH - 1 then
System.Move(Name^, snb_name, NETBIOS_NAME_LENGTH - 1)
else
begin
if len > 0 then
System.Move(Name^, snb_name, len);
FillChar((PChar(@snb_name) + len)^, NETBIOS_NAME_LENGTH - 1 - len, ' ');
end;
snb_name[NETBIOS_NAME_LENGTH - 1] := Port;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -