📄 jwawinsock.pas
字号:
const
WSADESCRIPTION_LEN = 256;
{$EXTERNALSYM WSADESCRIPTION_LEN}
WSASYS_STATUS_LEN = 128;
{$EXTERNALSYM WSASYS_STATUS_LEN}
type
WSAData = record
wVersion: WORD;
wHighVersion: WORD;
szDescription: array [0..WSADESCRIPTION_LEN] of Char;
szSystemStatus: array [0..WSASYS_STATUS_LEN] of Char;
iMaxSockets: Word;
iMaxUdpDg: Word;
lpVendorInfo: PChar;
end;
{$EXTERNALSYM WSAData}
LPWSADATA = ^WSAData;
{$EXTERNALSYM LPWSADATA}
TWsaData = WSAData;
PWsaData = LPWSADATA;
(*
* Options for use with [gs]etsockopt at the IP level.
*)
const
IP_OPTIONS = 1; (* set/get IP per-packet options *)
{$EXTERNALSYM IP_OPTIONS}
IP_MULTICAST_IF = 2; (* set/get IP multicast interface *)
{$EXTERNALSYM IP_MULTICAST_IF}
IP_MULTICAST_TTL = 3; (* set/get IP multicast timetolive *)
{$EXTERNALSYM IP_MULTICAST_TTL}
IP_MULTICAST_LOOP = 4; (* set/get IP multicast loopback *)
{$EXTERNALSYM IP_MULTICAST_LOOP}
IP_ADD_MEMBERSHIP = 5; (* add an IP group membership *)
{$EXTERNALSYM IP_ADD_MEMBERSHIP}
IP_DROP_MEMBERSHIP = 6; (* drop an IP group membership *)
{$EXTERNALSYM IP_DROP_MEMBERSHIP}
IP_TTL = 7; (* set/get IP Time To Live *)
{$EXTERNALSYM IP_TTL}
IP_TOS = 8; (* set/get IP Type Of Service *)
{$EXTERNALSYM IP_TOS}
IP_DONTFRAGMENT = 9; (* set/get IP Don't Fragment flag *)
{$EXTERNALSYM IP_DONTFRAGMENT}
IP_DEFAULT_MULTICAST_TTL = 1; (* normally limit m'casts to 1 hop *)
{$EXTERNALSYM IP_DEFAULT_MULTICAST_TTL}
IP_DEFAULT_MULTICAST_LOOP = 1; (* normally hear sends if a member *)
{$EXTERNALSYM IP_DEFAULT_MULTICAST_LOOP}
IP_MAX_MEMBERSHIPS = 20; (* per socket; must fit in one mbuf *)
{$EXTERNALSYM IP_MAX_MEMBERSHIPS}
(*
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
*)
type
ip_mreq = record
imr_multiaddr: in_addr; (* IP multicast address of group *)
mr_interface: in_addr; (* local IP address of interface *)
end;
{$EXTERNALSYM ip_mreq}
TIpMReq = ip_mreq;
PIpMReq = ^ip_mreq;
(*
* Definitions related to sockets: types, address families, options,
* taken from the BSD file sys/socket.h.
*)
(*
* This is used instead of -1, since the
* SOCKET type is unsigned.
*)
const
INVALID_SOCKET = TSocket(not 0);
{$EXTERNALSYM INVALID_SOCKET}
SOCKET_ERROR = -1;
{$EXTERNALSYM SOCKET_ERROR}
(*
* Types
*)
SOCK_STREAM = 1; // stream socket
{$EXTERNALSYM SOCK_STREAM}
SOCK_DGRAM = 2; // datagram socket
{$EXTERNALSYM SOCK_DGRAM}
SOCK_RAW = 3; // raw-protocol interface
{$EXTERNALSYM SOCK_RAW}
SOCK_RDM = 4; // reliably-delivered message
{$EXTERNALSYM SOCK_RDM}
SOCK_SEQPACKET = 5; // sequenced packet stream
{$EXTERNALSYM SOCK_SEQPACKET}
(*
* Option flags per-socket.
*)
SO_DEBUG = $0001; // turn on debugging info recording
{$EXTERNALSYM SO_DEBUG}
SO_ACCEPTCONN = $0002; // socket has had listen()
{$EXTERNALSYM SO_ACCEPTCONN}
SO_REUSEADDR = $0004; // allow local address reuse
{$EXTERNALSYM SO_REUSEADDR}
SO_KEEPALIVE = $0008; // keep connections alive
{$EXTERNALSYM SO_KEEPALIVE}
SO_DONTROUTE = $0010; // just use interface addresses
{$EXTERNALSYM SO_DONTROUTE}
SO_BROADCAST = $0020; // permit sending of broadcast msgs
{$EXTERNALSYM SO_BROADCAST}
SO_USELOOPBACK = $0040; // bypass hardware when possible
{$EXTERNALSYM SO_USELOOPBACK}
SO_LINGER = $0080; // linger on close if data present
{$EXTERNALSYM SO_LINGER}
SO_OOBINLINE = $0100; // leave received OOB data in line
{$EXTERNALSYM SO_OOBINLINE}
SO_DONTLINGER = DWORD(not SO_LINGER);
{$EXTERNALSYM SO_DONTLINGER}
(*
* Additional options.
*)
SO_SNDBUF = $1001; // send buffer size
{$EXTERNALSYM SO_SNDBUF}
SO_RCVBUF = $1002; // receive buffer size
{$EXTERNALSYM SO_RCVBUF}
SO_SNDLOWAT = $1003; // send low-water mark
{$EXTERNALSYM SO_SNDLOWAT}
SO_RCVLOWAT = $1004; // receive low-water mark
{$EXTERNALSYM SO_RCVLOWAT}
SO_SNDTIMEO = $1005; // send timeout
{$EXTERNALSYM SO_SNDTIMEO}
SO_RCVTIMEO = $1006; // receive timeout
{$EXTERNALSYM SO_RCVTIMEO}
SO_ERROR = $1007; // get error status and clear
{$EXTERNALSYM SO_ERROR}
SO_TYPE = $1008; // get socket type
{$EXTERNALSYM SO_TYPE}
(*
* Options for connect and disconnect data and options. Used only by
* non-TCP/IP transports such as DECNet, OSI TP4, etc.
*)
SO_CONNDATA = $7000;
{$EXTERNALSYM SO_CONNDATA}
SO_CONNOPT = $7001;
{$EXTERNALSYM SO_CONNOPT}
SO_DISCDATA = $7002;
{$EXTERNALSYM SO_DISCDATA}
SO_DISCOPT = $7003;
{$EXTERNALSYM SO_DISCOPT}
SO_CONNDATALEN = $7004;
{$EXTERNALSYM SO_CONNDATALEN}
SO_CONNOPTLEN = $7005;
{$EXTERNALSYM SO_CONNOPTLEN}
SO_DISCDATALEN = $7006;
{$EXTERNALSYM SO_DISCDATALEN}
SO_DISCOPTLEN = $7007;
{$EXTERNALSYM SO_DISCOPTLEN}
(*
* Option for opening sockets for synchronous access.
*)
SO_OPENTYPE = $7008;
{$EXTERNALSYM SO_OPENTYPE}
SO_SYNCHRONOUS_ALERT = $10;
{$EXTERNALSYM SO_SYNCHRONOUS_ALERT}
SO_SYNCHRONOUS_NONALERT = $20;
{$EXTERNALSYM SO_SYNCHRONOUS_NONALERT}
(*
* Other NT-specific options.
*)
SO_MAXDG = $7009;
{$EXTERNALSYM SO_MAXDG}
SO_MAXPATHDG = $700A;
{$EXTERNALSYM SO_MAXPATHDG}
SO_UPDATE_ACCEPT_CONTEXT = $700B;
{$EXTERNALSYM SO_UPDATE_ACCEPT_CONTEXT}
SO_CONNECT_TIME = $700C;
{$EXTERNALSYM SO_CONNECT_TIME}
(*
* TCP options.
*)
TCP_NODELAY = $0001;
{$EXTERNALSYM TCP_NODELAY}
TCP_BSDURGENT = $7000;
{$EXTERNALSYM TCP_BSDURGENT}
(*
* Address families.
*)
AF_UNSPEC = 0; // unspecified
{$EXTERNALSYM AF_UNSPEC}
AF_UNIX = 1; // local to host (pipes, portals
{$EXTERNALSYM AF_UNIX}
AF_INET = 2; // internetwork: UDP, TCP, etc.
{$EXTERNALSYM AF_INET}
AF_IMPLINK = 3; // arpanet imp addresses
{$EXTERNALSYM AF_IMPLINK}
AF_PUP = 4; // pup protocols: e.g. BSP
{$EXTERNALSYM AF_PUP}
AF_CHAOS = 5; // mit CHAOS protocols
{$EXTERNALSYM AF_CHAOS}
AF_NS = 6; // XEROX NS protocols
{$EXTERNALSYM AF_NS}
AF_IPX = AF_NS; // IPX protocols: IPX, SPX, etc.
{$EXTERNALSYM AF_IPX}
AF_ISO = 7; // ISO protocols
{$EXTERNALSYM AF_ISO}
AF_OSI = AF_ISO; // OSI is ISO
{$EXTERNALSYM AF_OSI}
AF_ECMA = 8; // european computer manufacturers
{$EXTERNALSYM AF_ECMA}
AF_DATAKIT = 9; // datakit protocols
{$EXTERNALSYM AF_DATAKIT}
AF_CCITT = 10; // CCITT protocols, X.25 etc
{$EXTERNALSYM AF_CCITT}
AF_SNA = 11; // IBM SNA
{$EXTERNALSYM AF_SNA}
AF_DECnet = 12; // DECnet
{$EXTERNALSYM AF_DECnet}
AF_DLI = 13; // Direct data link interface
{$EXTERNALSYM AF_DLI}
AF_LAT = 14; // LAT
{$EXTERNALSYM AF_LAT}
AF_HYLINK = 15; // NSC Hyperchannel
{$EXTERNALSYM AF_HYLINK}
AF_APPLETALK = 16; // AppleTalk
{$EXTERNALSYM AF_APPLETALK}
AF_NETBIOS = 17; // NetBios-style addresses
{$EXTERNALSYM AF_NETBIOS}
AF_VOICEVIEW = 18; // VoiceView
{$EXTERNALSYM AF_VOICEVIEW}
AF_FIREFOX = 19; // Protocols from Firefox
{$EXTERNALSYM AF_FIREFOX}
AF_UNKNOWN1 = 20; // Somebody is using this!
{$EXTERNALSYM AF_UNKNOWN1}
AF_BAN = 21; // Banyan
{$EXTERNALSYM AF_BAN}
AF_MAX = 22;
{$EXTERNALSYM AF_MAX}
(*
* Structure used by kernel to store most
* addresses.
*)
type
sockaddr = record
sa_family: u_short; // address family
sa_data: array [0..13] of Char; // up to 14 bytes of direct address
end;
{$EXTERNALSYM sockaddr}
TSockAddr = sockaddr;
PSockAddr = ^sockaddr;
(*
* Structure used by kernel to pass protocol
* information in raw sockets.
*)
sockproto = record
sp_family: u_short; // address family
sp_protocol: u_short; // protocol
end;
{$EXTERNALSYM sockproto}
TSockProto = sockproto;
PSockProto = ^sockproto;
(*
* Protocol families, same as address families for now.
*)
const
PF_UNSPEC = AF_UNSPEC;
{$EXTERNALSYM PF_UNSPEC}
PF_UNIX = AF_UNIX;
{$EXTERNALSYM PF_UNIX}
PF_INET = AF_INET;
{$EXTERNALSYM PF_INET}
PF_IMPLINK = AF_IMPLINK;
{$EXTERNALSYM PF_IMPLINK}
PF_PUP = AF_PUP;
{$EXTERNALSYM PF_PUP}
PF_CHAOS = AF_CHAOS;
{$EXTERNALSYM PF_CHAOS}
PF_NS = AF_NS;
{$EXTERNALSYM PF_NS}
PF_IPX = AF_IPX;
{$EXTERNALSYM PF_IPX}
PF_ISO = AF_ISO;
{$EXTERNALSYM PF_ISO}
PF_OSI = AF_OSI;
{$EXTERNALSYM PF_OSI}
PF_ECMA = AF_ECMA;
{$EXTERNALSYM PF_ECMA}
PF_DATAKIT = AF_DATAKIT;
{$EXTERNALSYM PF_DATAKIT}
PF_CCITT = AF_CCITT;
{$EXTERNALSYM PF_CCITT}
PF_SNA = AF_SNA;
{$EXTERNALSYM PF_SNA}
PF_DECnet = AF_DECnet;
{$EXTERNALSYM PF_DECnet}
PF_DLI = AF_DLI;
{$EXTERNALSYM PF_DLI}
PF_LAT = AF_LAT;
{$EXTERNALSYM PF_LAT}
PF_HYLINK = AF_HYLINK;
{$EXTERNALSYM PF_HYLINK}
PF_APPLETALK = AF_APPLETALK;
{$EXTERNALSYM PF_APPLETALK}
PF_VOICEVIEW = AF_VOICEVIEW;
{$EXTERNALSYM PF_VOICEVIEW}
PF_FIREFOX = AF_FIREFOX;
{$EXTERNALSYM PF_FIREFOX}
PF_UNKNOWN1 = AF_UNKNOWN1;
{$EXTERNALSYM PF_UNKNOWN1}
PF_BAN = AF_BAN;
{$EXTERNALSYM PF_BAN}
PF_MAX = AF_MAX;
{$EXTERNALSYM PF_MAX}
(*
* Structure used for manipulating linger option.
*)
type
linger = record
l_onoff: u_short; // option on/off
l_linger: u_short; // linger time
end;
{$EXTERNALSYM linger}
TLinger = linger;
PLinger = ^linger;
(*
* Level number for (get/set)sockopt() to apply to socket itself.
*)
const
SOL_SOCKET = $ffff; // options for socket level
{$EXTERNALSYM SOL_SOCKET}
(*
* Maximum queue length specifiable by listen.
*)
SOMAXCONN = $7fffffff;
{$EXTERNALSYM SOMAXCONN}
MSG_OOB = $1; // process out-of-band data
{$EXTERNALSYM MSG_OOB}
MSG_PEEK = $2; // peek at incoming message
{$EXTERNALSYM MSG_PEEK}
MSG_DONTROUTE = $4; // send without using routing tables
{$EXTERNALSYM MSG_DONTROUTE}
MSG_MAXIOVLEN = 16;
{$EXTERNALSYM MSG_MAXIOVLEN}
MSG_PARTIAL = $8000; // partial send or recv for message xport
{$EXTERNALSYM MSG_PARTIAL}
(*
* Define constant based on rfc883, used by gethostbyxxxx() calls.
*)
MAXGETHOSTSTRUCT = 1024;
{$EXTERNALSYM MAXGETHOSTSTRUCT}
(*
* Define flags to be used with the WSAAsyncSelect() call.
*)
FD_READ = $01;
{$EXTERNALSYM FD_READ}
FD_WRITE = $02;
{$EXTERNALSYM FD_WRITE}
FD_OOB = $04;
{$EXTERNALSYM FD_OOB}
FD_ACCEPT = $08;
{$EXTERNALSYM FD_ACCEPT}
FD_CONNECT = $10;
{$EXTERNALSYM FD_CONNECT}
FD_CLOSE = $20;
{$EXTERNALSYM FD_CLOSE}
(*
* All Windows Sockets error constants are biased by WSABASEERR from
* the "normal"
*)
WSABASEERR = 10000;
{$EXTERNALSYM WSABASEERR}
(*
* Windows Sockets definitions of regular Microsoft C error constants
*)
WSAEINTR = (WSABASEERR+4);
{$EXTERNALSYM WSAEINTR}
WSAEBADF = (WSABASEERR+9);
{$EXTERNALSYM WSAEBADF}
WSAEACCES = (WSABASEERR+13);
{$EXTERNALSYM WSAEACCES}
WSAEFAULT = (WSABASEERR+14);
{$EXTERNALSYM WSAEFAULT}
WSAEINVAL = (WSABASEERR+22);
{$EXTERNALSYM WSAEINVAL}
WSAEMFILE = (WSABASEERR+24);
{$EXTERNALSYM WSAEMFILE}
(*
* Windows Sockets definitions of regular Berkeley error constants
*)
WSAEWOULDBLOCK = (WSABASEERR+35);
{$EXTERNALSYM WSAEWOULDBLOCK}
WSAEINPROGRESS = (WSABASEERR+36);
{$EXTERNALSYM WSAEINPROGRESS}
WSAEALREADY = (WSABASEERR+37);
{$EXTERNALSYM WSAEALREADY}
WSAENOTSOCK = (WSABASEERR+38);
{$EXTERNALSYM WSAENOTSOCK}
WSAEDESTADDRREQ = (WSABASEERR+39);
{$EXTERNALSYM WSAEDESTADDRREQ}
WSAEMSGSIZE = (WSABASEERR+40);
{$EXTERNALSYM WSAEMSGSIZE}
WSAEPROTOTYPE = (WSABASEERR+41);
{$EXTERNALSYM WSAEPROTOTYPE}
WSAENOPROTOOPT = (WSABASEERR+42);
{$EXTERNALSYM WSAENOPROTOOPT}
WSAEPROTONOSUPPORT = (WSABASEERR+43);
{$EXTERNALSYM WSAEPROTONOSUPPORT}
WSAESOCKTNOSUPPORT = (WSABASEERR+44);
{$EXTERNALSYM WSAESOCKTNOSUPPORT}
WSAEOPNOTSUPP = (WSABASEERR+45);
{$EXTERNALSYM WSAEOPNOTSUPP}
WSAEPFNOSUPPORT = (WSABASEERR+46);
{$EXTERNALSYM WSAEPFNOSUPPORT}
WSAEAFNOSUPPORT = (WSABASEERR+47);
{$EXTERNALSYM WSAEAFNOSUPPORT}
WSAEADDRINUSE = (WSABASEERR+48);
{$EXTERNALSYM WSAEADDRINUSE}
WSAEADDRNOTAVAIL = (WSABASEERR+49);
{$EXTERNALSYM WSAEADDRNOTAVAIL}
WSAENETDOWN = (WSABASEERR+50);
{$EXTERNALSYM WSAENETDOWN}
WSAENETUNREACH = (WSABASEERR+51);
{$EXTERNALSYM WSAENETUNREACH}
WSAENETRESET = (WSABASEERR+52);
{$EXTERNALSYM WSAENETRESET}
WSAECONNABORTED = (WSABASEERR+53);
{$EXTERNALSYM WSAECONNABORTED}
WSAECONNRESET = (WSABASEERR+54);
{$EXTERNALSYM WSAECONNRESET}
WSAENOBUFS = (WSABASEERR+55);
{$EXTERNALSYM WSAENOBUFS}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -