📄 overbyte.ics.winsock.pas
字号:
[StructLayout(LayoutKind.Sequential)]
TWSAData = record
wVersion : Word;
wHighVersion : Word;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=WSADESCRIPTION_LEN+1)]
szDescription : array[0..WSADESCRIPTION_LEN] of Char;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=WSASYS_STATUS_LEN+1)]
szSystemStatus : array[0..WSASYS_STATUS_LEN] of Char;
iMaxSockets : Word;
iMaxUdpDg : Word;
//[MarshalAs(UnmanagedType.LPStr)]
lpVendorInfo : IntPtr;
end;
u_char = Byte;
u_short = Word;
u_long = Cardinal;
u_int = Integer;
TSocket = u_int;
const
INVALID_SOCKET = TSocket(NOT(0));
SOCKET_ERROR = -1;
type
SunB = packed record
s_b1, s_b2, s_b3, s_b4: u_char;
end;
SunW = packed record
s_w1, s_w2: u_short;
end;
in_addr = record
{ case Integer of
0: (S_un_b: SunB);
1: (S_un_w: SunW);
2: (S_addr: u_long); }
S_addr: u_long;
end;
TInAddr = in_addr;
sockaddr_in = record
{ case Integer of
0: (sin_family: u_short;
sin_port: u_short;
sin_addr: TInAddr;
sin_zero: array[0..7] of Char);
1: (sa_family: u_short;
sa_data: array[0..13] of Char) }
sin_family : u_short;
sin_port : u_short;
sin_addr : TInAddr;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=8)]
sin_zero : array [0..7] of Char;
end;
TSockAddrIn = sockaddr_in;
PSOCKADDR = ^TSockAddr;
TSockAddr = sockaddr_in;
const
SizeOfTSockAddrIn = 16; // Win32 size
SizeOfTSockAddr = 16; // Win32 size
type
PProtoEnt = ^TProtoEnt;
protoent = record
p_name : IntPtr; //PChar;
p_aliases : IntPtr; //^Pchar;
p_proto : Smallint;
end;
TProtoEnt = protoent;
PServEnt = ^TServEnt;
servent = record
s_name : IntPtr; //PChar;
s_aliases : IntPtr; //^PChar;
s_port : Word;
s_proto : IntPtr; //PChar;
end;
TServEnt = servent;
PHostEnt = ^THostEnt;
hostent = record
h_name : IntPtr; //PChar;
h_aliases : IntPtr; //^PChar;
h_addrtype : Smallint;
h_length : Smallint;
{case Byte of
0: (h_addr_list: ^PChar);
1: (h_addr: ^PChar) }
h_addr_list: IntPtr; //^PChar;
end;
THostEnt = hostent;
PLinger = ^TLinger;
linger = record
l_onoff : u_short;
l_linger : u_short;
end;
TLinger = linger;
PTimeVal = ^TTimeVal;
timeval = record
tv_sec : Longint;
tv_usec : Longint;
end;
TTimeVal = timeval;
ip_mreq = record
imr_multiaddr : in_addr;
imr_interface : in_addr;
end;
function WSAStartup(wVersionRequired: WORD;
out WSData: TWSAData): Integer;
function WSACleanup : Integer;
function WSAGetLastError: Integer;
procedure WSASetLastError(iError: Integer);
function WSAAsyncSelect(s: TSocket; HWindow: HWND; wMsg: u_int; lEvent: Longint): Integer;
function WSAAsyncGetHostByName(HWindow: HWND; wMsg: u_int; const name : String;
buf: IntPtr; buflen: Integer): THandle;
function WSAAsyncGetHostByAddr(HWindow: HWND; wMsg: u_int; var addr: u_long;
len, Struct: Integer; buf: IntPtr; buflen: Integer): THandle;
function WSACancelAsyncRequest(hAsyncTaskHandle: THandle): Integer;
function gethostname(name: StringBuilder; len: Integer): Integer;
function getprotobyname(name : String) : IntPtr;
function getservbyname(name, proto: String): IntPtr;
function gethostbyname(name: String): IntPtr;
function gethostbyaddr(var addr: u_long; len, Struct: Integer): IntPtr;
function getpeername(s: TSocket; out name: TSockAddr;
var namelen: Integer): Integer;
function ntohl(netshort: u_short): u_short;
function htons(hostshort: u_short): u_short;
function ntohs(hostshort: u_short): u_short;
function htonl(hostlong: u_long): u_long;
function inet_addr(const cp: String): u_long;
function inet_ntoa(inaddr: TInAddr): String;
function socket(af, Struct, protocol: Integer): TSocket;
function shutdown(s: TSocket; how: Integer): Integer;
function closesocket(s: TSocket): Integer;
function accept(s: TSocket; var addr: TSockAddr; var addrlen: Integer): TSocket;
function bind(s: TSocket; var addr: TSockAddr; namelen: Integer): Integer;
function connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer;
function listen(s: TSocket; backlog: Integer): Integer;
function recv(s: TSocket; [out] Buf: TBytes; len, flags: Integer): Integer;
function recvfrom(s: TSocket; [out] Buf: TBytes; len, flags: Integer;
out from: TSockAddr; var fromlen: Integer): Integer;
function ioctlsocket(s: TSocket; cmd: DWORD; var arg: u_long): Integer;
function send(s: TSocket; const Buf : TBytes; len, flags: Integer): Integer;
function sendto(s: TSocket; const Buf : TBytes; len, flags: Integer; var addrto: TSockAddr;
tolen: Integer): Integer;
function getsockname(s: TSocket; out name: TSockAddr; var namelen: Integer): Integer;
function setsockopt_integer(s: TSocket; level, optname: Integer;
var optval: Integer; optlen: Integer): Integer;
function setsockopt_tinaddr(s: TSocket; level, optname: Integer;
var optval: TInAddr; optlen: Integer): Integer;
function setsockopt_ip_mreq(s: TSocket; level, optname: Integer;
var optval: ip_mreq; optlen: Integer): Integer;
function setsockopt_tlinger(s: TSocket; level, optname: Integer;
var optval: TLinger; optlen: Integer): Integer;
function getsockopt_integer(s: TSocket; level, optname: Integer;
var optval: Integer; var optlen: Integer): Integer;
function getsockopt_ip_mreq(s: TSocket; level, optname: Integer;
var optval: ip_mreq; var optlen: Integer): Integer;
function getsockopt_tinaddr(s: TSocket; level, optname: Integer;
var optval: TInAddr; var optlen: Integer): Integer;
function getsockopt_tlinger(s: TSocket; level, optname: Integer;
var optval: TLinger; var optlen: Integer): Integer;
implementation
const
winsocket = 'wsock32.dll';
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'WSAStartup')]
function WSAStartup; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'WSACleanup')]
function WSACleanup; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'WSAGetLastError')]
function WSAGetLastError; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'WSASetLastError')]
procedure WSASetLastError; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'WSAAsyncSelect')]
function WSAAsyncSelect; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'WSAAsyncGetHostByName')]
function WSAAsyncGetHostByName; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'WSAAsyncGetHostByAddr')]
function WSAAsyncGetHostByAddr; external;
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'WSACancelAsyncRequest')]
function WSACancelAsyncRequest; external;
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'gethostname')]
function gethostname; external;
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'getprotobyname')]
function getprotobyname; external;
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'getservbyname')]
function getservbyname; external;
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'gethostbyname')]
function gethostbyname; external;
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'gethostbyaddr')]
function gethostbyaddr; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'getpeername')]
function getpeername; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'ntohl')]
function ntohl; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'htonl')]
function htonl; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'htons')]
function htons; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'ntohs')]
function ntohs; external;
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'inet_addr')]
function inet_addr; external;
[DllImport(winsocket, CharSet = CharSet.Ansi, SetLastError = False, EntryPoint = 'inet_ntoa')]
function inet_ntoa; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'socket')]
function socket; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'shutdown')]
function shutdown; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'closesocket')]
function closesocket; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'bind')]
function bind; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'accept')]
function accept; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'connect')]
function connect; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'listen')]
function listen; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'send')]
function send; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'sendto')]
function sendto; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'recv')]
function recv; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'recvfrom')]
function recvfrom; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'ioctlsocket')]
function ioctlsocket; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'getsockname')]
function getsockname; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'setsockopt')]
function setsockopt_integer; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'setsockopt')]
function setsockopt_tinaddr; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'setsockopt')]
function setsockopt_tlinger; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'setsockopt')]
function setsockopt_ip_mreq; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'getsockopt')]
function getsockopt_integer; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'getsockopt')]
function getsockopt_ip_mreq; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'getsockopt')]
function getsockopt_tinaddr; external;
[DllImport(winsocket, SetLastError = False, EntryPoint = 'getsockopt')]
function getsockopt_tlinger; external;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -