📄 jwawinsock.pas
字号:
WSAEISCONN = (WSABASEERR+56);
{$EXTERNALSYM WSAEISCONN}
WSAENOTCONN = (WSABASEERR+57);
{$EXTERNALSYM WSAENOTCONN}
WSAESHUTDOWN = (WSABASEERR+58);
{$EXTERNALSYM WSAESHUTDOWN}
WSAETOOMANYREFS = (WSABASEERR+59);
{$EXTERNALSYM WSAETOOMANYREFS}
WSAETIMEDOUT = (WSABASEERR+60);
{$EXTERNALSYM WSAETIMEDOUT}
WSAECONNREFUSED = (WSABASEERR+61);
{$EXTERNALSYM WSAECONNREFUSED}
WSAELOOP = (WSABASEERR+62);
{$EXTERNALSYM WSAELOOP}
WSAENAMETOOLONG = (WSABASEERR+63);
{$EXTERNALSYM WSAENAMETOOLONG}
WSAEHOSTDOWN = (WSABASEERR+64);
{$EXTERNALSYM WSAEHOSTDOWN}
WSAEHOSTUNREACH = (WSABASEERR+65);
{$EXTERNALSYM WSAEHOSTUNREACH}
WSAENOTEMPTY = (WSABASEERR+66);
{$EXTERNALSYM WSAENOTEMPTY}
WSAEPROCLIM = (WSABASEERR+67);
{$EXTERNALSYM WSAEPROCLIM}
WSAEUSERS = (WSABASEERR+68);
{$EXTERNALSYM WSAEUSERS}
WSAEDQUOT = (WSABASEERR+69);
{$EXTERNALSYM WSAEDQUOT}
WSAESTALE = (WSABASEERR+70);
{$EXTERNALSYM WSAESTALE}
WSAEREMOTE = (WSABASEERR+71);
{$EXTERNALSYM WSAEREMOTE}
WSAEDISCON = (WSABASEERR+101);
{$EXTERNALSYM WSAEDISCON}
(*
* Extended Windows Sockets error constant definitions
*)
WSASYSNOTREADY = (WSABASEERR+91);
{$EXTERNALSYM WSASYSNOTREADY}
WSAVERNOTSUPPORTED = (WSABASEERR+92);
{$EXTERNALSYM WSAVERNOTSUPPORTED}
WSANOTINITIALISED = (WSABASEERR+93);
{$EXTERNALSYM WSANOTINITIALISED}
(*
* Error return codes from gethostbyname() and gethostbyaddr()
* (when using the resolver). Note that these errors are
* retrieved via WSAGetLastError() and must therefore follow
* the rules for avoiding clashes with error numbers from
* specific implementations or language run-time systems.
* For this reason the codes are based at WSABASEERR+1001.
* Note also that [WSA]NO_ADDRESS is defined only for
* compatibility purposes.
*)
// Authoritative Answer: Host not found
WSAHOST_NOT_FOUND = (WSABASEERR+1001);
{$EXTERNALSYM WSAHOST_NOT_FOUND}
// Non-Authoritative: Host not found, or SERVERFAIL
WSATRY_AGAIN = (WSABASEERR+1002);
{$EXTERNALSYM WSATRY_AGAIN}
// Non-recoverable errors, FORMERR, REFUSED, NOTIMP
WSANO_RECOVERY = (WSABASEERR+1003);
{$EXTERNALSYM WSANO_RECOVERY}
// Valid name, no data record of requested type
WSANO_DATA = (WSABASEERR+1004);
{$EXTERNALSYM WSANO_DATA}
(*
* Compatibility macros.
*)
function h_errno: Integer;
{$EXTERNALSYM h_errno}
const
HOST_NOT_FOUND = WSAHOST_NOT_FOUND;
{$EXTERNALSYM HOST_NOT_FOUND}
TRY_AGAIN = WSATRY_AGAIN;
{$EXTERNALSYM TRY_AGAIN}
NO_RECOVERY = WSANO_RECOVERY;
{$EXTERNALSYM NO_RECOVERY}
NO_DATA = WSANO_DATA;
{$EXTERNALSYM NO_DATA}
// no address, look for MX record
WSANO_ADDRESS = WSANO_DATA;
{$EXTERNALSYM WSANO_ADDRESS}
NO_ADDRESS = WSANO_ADDRESS;
{$EXTERNALSYM NO_ADDRESS}
(*
* Windows Sockets errors redefined as regular Berkeley error constants.
* These are commented out in Windows NT to avoid conflicts with errno.h.
* Use the WSA constants instead.
*)
{$IFDEF FALSE}
const
EWOULDBLOCK = WSAEWOULDBLOCK;
{$EXTERNALSYM EWOULDBLOCK}
EINPROGRESS = WSAEINPROGRESS;
{$EXTERNALSYM EINPROGRESS}
EALREADY = WSAEALREADY;
{$EXTERNALSYM EALREADY}
ENOTSOCK = WSAENOTSOCK;
{$EXTERNALSYM ENOTSOCK}
EDESTADDRREQ = WSAEDESTADDRREQ;
{$EXTERNALSYM EDESTADDRREQ}
EMSGSIZE = WSAEMSGSIZE;
{$EXTERNALSYM EMSGSIZE}
EPROTOTYPE = WSAEPROTOTYPE;
{$EXTERNALSYM EPROTOTYPE}
ENOPROTOOPT = WSAENOPROTOOPT;
{$EXTERNALSYM ENOPROTOOPT}
EPROTONOSUPPORT = WSAEPROTONOSUPPORT;
{$EXTERNALSYM EPROTONOSUPPORT}
ESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT;
{$EXTERNALSYM ESOCKTNOSUPPORT}
EOPNOTSUPP = WSAEOPNOTSUPP;
{$EXTERNALSYM EOPNOTSUPP}
EPFNOSUPPORT = WSAEPFNOSUPPORT;
{$EXTERNALSYM EPFNOSUPPORT}
EAFNOSUPPORT = WSAEAFNOSUPPORT;
{$EXTERNALSYM EAFNOSUPPORT}
EADDRINUSE = WSAEADDRINUSE;
{$EXTERNALSYM EADDRINUSE}
EADDRNOTAVAIL = WSAEADDRNOTAVAIL;
{$EXTERNALSYM EADDRNOTAVAIL}
ENETDOWN = WSAENETDOWN;
{$EXTERNALSYM ENETDOWN}
ENETUNREACH = WSAENETUNREACH;
{$EXTERNALSYM ENETUNREACH}
ENETRESET = WSAENETRESET;
{$EXTERNALSYM ENETRESET}
ECONNABORTED = WSAECONNABORTED;
{$EXTERNALSYM ECONNABORTED}
ECONNRESET = WSAECONNRESET;
{$EXTERNALSYM ECONNRESET}
ENOBUFS = WSAENOBUFS;
{$EXTERNALSYM ENOBUFS}
EISCONN = WSAEISCONN;
{$EXTERNALSYM EISCONN}
ENOTCONN = WSAENOTCONN;
{$EXTERNALSYM ENOTCONN}
ESHUTDOWN = WSAESHUTDOWN;
{$EXTERNALSYM ESHUTDOWN}
ETOOMANYREFS = WSAETOOMANYREFS;
{$EXTERNALSYM ETOOMANYREFS}
ETIMEDOUT = WSAETIMEDOUT;
{$EXTERNALSYM ETIMEDOUT}
ECONNREFUSED = WSAECONNREFUSED;
{$EXTERNALSYM ECONNREFUSED}
ELOOP = WSAELOOP;
{$EXTERNALSYM ELOOP}
ENAMETOOLONG = WSAENAMETOOLONG;
{$EXTERNALSYM ENAMETOOLONG}
EHOSTDOWN = WSAEHOSTDOWN;
{$EXTERNALSYM EHOSTDOWN}
EHOSTUNREACH = WSAEHOSTUNREACH;
{$EXTERNALSYM EHOSTUNREACH}
ENOTEMPTY = WSAENOTEMPTY;
{$EXTERNALSYM ENOTEMPTY}
EPROCLIM = WSAEPROCLIM;
{$EXTERNALSYM EPROCLIM}
EUSERS = WSAEUSERS;
{$EXTERNALSYM EUSERS}
EDQUOT = WSAEDQUOT;
{$EXTERNALSYM EDQUOT}
ESTALE = WSAESTALE;
{$EXTERNALSYM ESTALE}
EREMOTE = WSAEREMOTE;
{$EXTERNALSYM EREMOTE}
{$ENDIF}
(* Socket function prototypes *)
function accept(s: TSocket; addr: PSockAddr; addrlen: PINT): TSocket; stdcall;
{$EXTERNALSYM accept}
function bind(s: TSocket; name: PSockAddr; namelen: Integer): Integer; stdcall;
{$EXTERNALSYM bind}
function closesocket(s: TSocket): Integer; stdcall;
{$EXTERNALSYM closesocket}
function connect(s: TSocket; name: PSockAddr; namelen: Integer): Integer; stdcall;
{$EXTERNALSYM connect}
function ioctlsocket(s: TSocket; cmd: Longint; var argp: u_long): Integer; stdcall;
{$EXTERNALSYM ioctlsocket}
function getpeername(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall;
{$EXTERNALSYM getpeername}
function getsockname(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall;
{$EXTERNALSYM getsockname}
function getsockopt(s: TSocket; level, optname: Integer; optval: PChar; var optlen: Integer): Integer; stdcall;
{$EXTERNALSYM getsockopt}
function htonl(hostlong: u_long): u_long; stdcall;
{$EXTERNALSYM htonl}
function htons(hostshort: u_short): u_short; stdcall;
{$EXTERNALSYM htons}
function inet_addr(cp: PChar): u_long; stdcall;
{$EXTERNALSYM inet_addr}
function inet_ntoa(inaddr: in_addr): PChar; stdcall;
{$EXTERNALSYM inet_ntoa}
function listen(s: TSocket; backlog: Integer): Integer; stdcall;
{$EXTERNALSYM listen}
function ntohl(netlong: u_long): u_long; stdcall;
{$EXTERNALSYM ntohl}
function ntohs(netshort: u_short): u_short; stdcall;
{$EXTERNALSYM ntohs}
function recv(s: TSocket; var buf; len, flags: Integer): Integer; stdcall;
{$EXTERNALSYM recv}
function recvfrom(s: TSocket; var buf; len, flags: Integer; from: PSockAddr; var fromlen: Integer): Integer; stdcall;
{$EXTERNALSYM recvfrom}
function select(nfds: Integer; readfds, writefds, exceptfds: PFdSet; timeout: PTimeVal): Integer; stdcall;
{$EXTERNALSYM select}
function send(s: TSocket; var buf; len, flags: Integer): Integer; stdcall;
{$EXTERNALSYM send}
function sendto(s: TSocket; var buf; len, flags: Integer; toaddr: PSockAddr; tolen: Integer): Integer; stdcall;
{$EXTERNALSYM sendto}
function setsockopt(s: TSocket; level, optname: Integer; optval: PChar; optlen: Integer): Integer; stdcall;
{$EXTERNALSYM setsockopt}
function shutdown(s: TSocket; how: Integer): Integer; stdcall;
{$EXTERNALSYM shutdown}
function socket(af, type_, protocol: Integer): TSocket; stdcall;
{$EXTERNALSYM socket}
(* Database function prototypes *)
function gethostbyaddr(addr: PChar; len, type_: Integer): PHostEnt; stdcall;
{$EXTERNALSYM gethostbyaddr}
function gethostbyname(name: PChar): PHostEnt; stdcall;
{$EXTERNALSYM gethostbyname}
function gethostname(name: PChar; namelen: Integer): Integer; stdcall;
{$EXTERNALSYM gethostname}
function getservbyport(port: Integer; proto: PChar): PServEnt; stdcall;
{$EXTERNALSYM getservbyport}
function getservbyname(name, proto: PChar): PServEnt; stdcall;
{$EXTERNALSYM getservbyname}
function getprotobynumber(number: Integer): PProtoEnt; stdcall;
{$EXTERNALSYM getprotobynumber}
function getprotobyname(name: PChar): PProtoEnt; stdcall;
{$EXTERNALSYM getprotobyname}
(* Microsoft Windows Extension function prototypes *)
function WSAStartup(wVersionRequired: WORD; var lpWSAData: TWSAData): Integer; stdcall;
{$EXTERNALSYM WSAStartup}
function WSACleanup: Integer; stdcall;
{$EXTERNALSYM WSACleanup}
procedure WSASetLastError(iError: Integer); stdcall;
{$EXTERNALSYM WSASetLastError}
function WSAGetLastError: Integer; stdcall;
{$EXTERNALSYM WSAGetLastError}
function WSAIsBlocking: BOOL; stdcall;
{$EXTERNALSYM WSAIsBlocking}
function WSAUnhookBlockingHook: Integer; stdcall;
{$EXTERNALSYM WSAUnhookBlockingHook}
function WSASetBlockingHook(lpBlockFunc: FARPROC): FARPROC; stdcall;
{$EXTERNALSYM WSASetBlockingHook}
function WSACancelBlockingCall: Integer; stdcall;
{$EXTERNALSYM WSACancelBlockingCall}
function WSAAsyncGetServByName(hWnd: HWND; wMsg: u_int; name, proto, buf: PChar;
buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetServByName}
function WSAAsyncGetServByPort(hWnd: HWND; wMsg: u_int; port: Integer;
proto, buf: PChar; buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetServByPort}
function WSAAsyncGetProtoByName(hWnd: HWND; wMsg: u_int; name, buf: PChar;
buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetProtoByName}
function WSAAsyncGetProtoByNumber(hWnd: HWND; wMsg: u_int; number: Integer;
buf: PChar; buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetProtoByNumber}
function WSAAsyncGetHostByName(hWnd: HWND; wMsg: u_int; name, buf: PChar;
buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetHostByName}
function WSAAsyncGetHostByAddr(hWnd: HWND; wMsg: u_int; addr: PChar;
len, type_: Integer; buf: PChar; buflen: Integer): HANDLE; stdcall;
{$EXTERNALSYM WSAAsyncGetHostByAddr}
function WSACancelAsyncRequest(hAsyncTaskHandle: HANDLE): Integer; stdcall;
{$EXTERNALSYM WSACancelAsyncRequest}
function WSAAsyncSelect(s: TSocket; hWnd: HWND; wMsg: u_int; lEvent: Longint): Integer; stdcall;
{$EXTERNALSYM WSAAsyncSelect}
function WSARecvEx(s: TSocket; var buf; len: Integer; var flags: Integer): Integer; stdcall;
{$EXTERNALSYM WSARecvEx}
type
_TRANSMIT_FILE_BUFFERS = record
Head: LPVOID;
HeadLength: DWORD;
Tail: LPVOID;
TailLength: DWORD;
end;
{$EXTERNALSYM _TRANSMIT_FILE_BUFFERS}
TRANSMIT_FILE_BUFFERS = _TRANSMIT_FILE_BUFFERS;
{$EXTERNALSYM TRANSMIT_FILE_BUFFERS}
PTRANSMIT_FILE_BUFFERS = ^TRANSMIT_FILE_BUFFERS;
{$EXTERNALSYM PTRANSMIT_FILE_BUFFERS}
LPTRANSMIT_FILE_BUFFERS = ^TRANSMIT_FILE_BUFFERS;
{$EXTERNALSYM LPTRANSMIT_FILE_BUFFERS}
TTransmitFileBuffers = TRANSMIT_FILE_BUFFERS;
PTransmitFileBuffers = LPTRANSMIT_FILE_BUFFERS;
const
TF_DISCONNECT = $01;
{$EXTERNALSYM TF_DISCONNECT}
TF_REUSE_SOCKET = $02;
{$EXTERNALSYM TF_REUSE_SOCKET}
TF_WRITE_BEHIND = $04;
{$EXTERNALSYM TF_WRITE_BEHIND}
function TransmitFile(hSocket: TSocket; hFile: HANDLE; nNumberOfBytesToWrite: DWORD;
nNumberOfBytesPerSend: DWORD; lpOverlapped: LPOVERLAPPED;
lpTransmitBuffers: LPTRANSMIT_FILE_BUFFERS; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM TransmitFile}
function AcceptEx(sListenSocket, sAcceptSocket: TSocket;
lpOutputBuffer: LPVOID; dwReceiveDataLength, dwLocalAddressLength,
dwRemoteAddressLength: DWORD; var lpdwBytesReceived: DWORD;
lpOverlapped: LPOVERLAPPED): BOOL; stdcall;
{$EXTERNALSYM AcceptEx}
procedure GetAcceptExSockaddrs(lpOutputBuffer: Pointer;
dwReceiveDataLength, dwLocalAddressLength, dwRemoteAddressLength: DWORD;
LocalSockaddr: PSockAddr; var LocalSockaddrLength: Integer;
RemoteSockaddr: PSockAddr; var RemoteSockaddrLength: Integer); stdcall;
{$EXTERNALSYM GetAcceptExSockaddrs}
(* Microsoft Windows Extended data types *)
type
PSOCKADDR_IN = ^sockaddr_in;
{$EXTERNALSYM PSOCKADDR_IN}
LPSOCKADDR_IN = ^sockaddr_in;
{$EXTERNALSYM LPSOCKADDR_IN}
LPLINGER = PLINGER;
{$EXTERNALSYM LPLINGER}
PIN_ADDR = ^in_addr;
{$EXTERNALSYM PIN_ADDR}
LPIN_ADDR = ^in_addr;
{$EXTERNALSYM LPIN_ADDR}
PFD_SET = ^fd_set;
{$EXTERNALSYM PFD_SET}
LPFD_SET = ^fd_set;
{$EXTERNALSYM LPFD_SET}
LPHOSTENT = PHOSTENT;
{$EXTERNALSYM LPHOSTENT}
LPSERVENT = PSERVENT;
{$EXTERNALSYM LPSERVENT}
LPPROTOENT = PPROTOENT;
{$EXTERNALSYM LPPROTOENT}
LPTIMEVAL = PTIMEVAL;
{$EXTERNALSYM LPTIMEVAL}
(*
* Windows message parameter composition and decomposition
* macros.
*
* WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
* when constructing the response to a WSAAsyncGetXByY() routine.
*)
function WSAMAKEASYNCREPLY(buflen, error: WORD): DWORD;
{$EXTERNALSYM WSAMAKEASYNCREPLY}
(*
* WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
* when constructing the response to WSAAsyncSelect().
*)
function WSAMAKESELECTREPLY(event, error: WORD): DWORD;
{$EXTERNALSYM WSAMAKESELECTREPLY}
(*
* 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(lParam: DWORD): WORD;
{$EXTERNALSYM WSAGETASYNCBUFLEN}
(*
* 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(lParam: DWORD): WORD;
{$EXTERNALSYM WSAGETASYNCERROR}
(*
* 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(lParam: DWORD): WORD;
{$EXTERNALSYM WSAGETSELECTEVENT}
(*
* 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(lParam: DWORD): WORD;
{$EXTERNALSYM WSAGETSELECTERROR}
implementation
const
wsock32 = 'wsock32.dll';
{$IFDEF DYNAMIC_LINK}
var
___WSAFDIsSet: Pointer;
function __WSAFDIsSet;
begin
GetProcedureAddress(___WSAFDIsSet, wsock32, '__WSAFDIsSet');
asm
mov esp, ebp
pop ebp
jmp [___WSAFDIsSet]
end;
end;
{$ELSE}
function __WSAFDIsSet; external wsock32 name '__WSAFDIsSet';
{$ENDIF DYNAMIC_LINK}
procedure FD_CLR(fd: TSocket; var fdset: TFdSet);
var
I: Cardinal;
begin
I := 0;
while I < fdset.fd_count do
begin
if fdset.fd_array[I] = fd then
begin
while I < fdset.fd_count - 1 do
begin
fdset.fd_array[I] := fdset.fd_array[I + 1];
Inc(I);
end;
fdset.fd_count := fdset.fd_count - 1;
Break;
end;
Inc(I);
end;
end;
procedure _FD_SET(fd: TSocket; var fdset: TFDSet);
var
I: Cardinal;
begin
I := 0;
while I < fdset.fd_count do
begin
if fdset.fd_array[I] = fd then Break;
Inc(I);
end;
if I = fdset.fd_count then
begin
if fdset.fd_count < FD_SETSIZE then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -