📄 jwawinsock2.pas
字号:
{$EXTERNALSYM IPPORT_EFSSERVER}
//
// UNIX UDP sockets
//
IPPORT_BIFFUDP = 512;
{$EXTERNALSYM IPPORT_BIFFUDP}
IPPORT_WHOSERVER = 513;
{$EXTERNALSYM IPPORT_WHOSERVER}
IPPORT_ROUTESERVER = 520;
{$EXTERNALSYM IPPORT_ROUTESERVER}
// 520+1 also used
//
// Ports < IPPORT_RESERVED are reserved for
// privileged processes (e.g. root).
//
IPPORT_RESERVED = 1024;
{$EXTERNALSYM IPPORT_RESERVED}
//
// Link numbers
//
IMPLINK_IP = 155;
{$EXTERNALSYM IMPLINK_IP}
IMPLINK_LOWEXPER = 156;
{$EXTERNALSYM IMPLINK_LOWEXPER}
IMPLINK_HIGHEXPER = 158;
{$EXTERNALSYM IMPLINK_HIGHEXPER}
//
// Internet address (old style... should be updated)
//
type
SunB = packed record
s_b1, s_b2, s_b3, s_b4: u_char;
end;
{$EXTERNALSYM SunB}
SunC = packed record
s_c1, s_c2, s_c3, s_c4: Char;
end;
{$NODEFINE SunC}
SunW = packed record
s_w1, s_w2: u_short;
end;
{$EXTERNALSYM SunW}
in_addr = record
case Integer of
0: (S_un_b: SunB);
1: (S_un_c: SunC);
2: (S_un_w: SunW);
3: (S_addr: u_long);
// #define s_addr S_un.S_addr // can be used for most tcp & ip code
// #define s_host S_un.S_un_b.s_b2 // host on imp
// #define s_net S_un.S_un_b.s_b1 // netword
// #define s_imp S_un.S_un_w.s_w2 // imp
// #define s_impno S_un.S_un_b.s_b4 // imp #
// #define s_lh S_un.S_un_b.s_b3 // logical host
end;
{$EXTERNALSYM in_addr}
TInAddr = in_addr;
PInAddr = ^in_addr;
//
// Definitions of bits in internet address integers.
// On subnets, the decomposition of addresses to host and net parts
// is done according to subnet mask, not the masks here.
//
function IN_CLASSA(i: DWORD): Boolean;
{$EXTERNALSYM IN_CLASSA}
const
IN_CLASSA_NET = DWORD($ff000000);
{$EXTERNALSYM IN_CLASSA_NET}
IN_CLASSA_NSHIFT = 24;
{$EXTERNALSYM IN_CLASSA_NSHIFT}
IN_CLASSA_HOST = $00ffffff;
{$EXTERNALSYM IN_CLASSA_HOST}
IN_CLASSA_MAX = 128;
{$EXTERNALSYM IN_CLASSA_MAX}
function IN_CLASSB(i: DWORD): Boolean;
{$EXTERNALSYM IN_CLASSB}
const
IN_CLASSB_NET = DWORD($ffff0000);
{$EXTERNALSYM IN_CLASSB_NET}
IN_CLASSB_NSHIFT = 16;
{$EXTERNALSYM IN_CLASSB_NSHIFT}
IN_CLASSB_HOST = $0000ffff;
{$EXTERNALSYM IN_CLASSB_HOST}
IN_CLASSB_MAX = 65536;
{$EXTERNALSYM IN_CLASSB_MAX}
function IN_CLASSC(i: DWORD): Boolean;
{$EXTERNALSYM IN_CLASSC}
const
IN_CLASSC_NET = DWORD($ffffff00);
{$EXTERNALSYM IN_CLASSC_NET}
IN_CLASSC_NSHIFT = 8;
{$EXTERNALSYM IN_CLASSC_NSHIFT}
IN_CLASSC_HOST = $000000ff;
{$EXTERNALSYM IN_CLASSC_HOST}
function IN_CLASSD(i: DWORD): Boolean;
{$EXTERNALSYM IN_CLASSD}
const
IN_CLASSD_NET = DWORD($f0000000); // These ones aren't really
{$EXTERNALSYM IN_CLASSD_NET}
IN_CLASSD_NSHIFT = 28; // net and host fields, but
{$EXTERNALSYM IN_CLASSD_NSHIFT}
IN_CLASSD_HOST = $0fffffff; // routing needn't know.
{$EXTERNALSYM IN_CLASSD_HOST}
function IN_MULTICAST(i: DWORD): Boolean;
{$EXTERNALSYM IN_MULTICAST}
const
INADDR_ANY = u_long($00000000);
{$EXTERNALSYM INADDR_ANY}
INADDR_LOOPBACK = $7f000001;
{$EXTERNALSYM INADDR_LOOPBACK}
INADDR_BROADCAST = u_long($ffffffff);
{$EXTERNALSYM INADDR_BROADCAST}
INADDR_NONE = DWORD($ffffffff);
{$EXTERNALSYM INADDR_NONE}
ADDR_ANY = INADDR_ANY;
{$EXTERNALSYM ADDR_ANY}
//
// Socket address, internet style.
//
type
sockaddr_in = record
sin_family: Smallint;
sin_port: u_short;
sin_addr: in_addr;
sin_zero: array [0..7] of Char;
end;
{$EXTERNALSYM sockaddr_in}
TSockAddrIn = sockaddr_in;
PSockAddrIn = ^sockaddr_in;
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;
//
// 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}
//
// The following may be used in place of the address family, socket type, or
// protocol in a call to WSASocket to indicate that the corresponding value
// should be taken from the supplied WSAPROTOCOL_INFO structure instead of the
// parameter itself.
//
FROM_PROTOCOL_INFO = -1;
{$EXTERNALSYM FROM_PROTOCOL_INFO}
//
// 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}
SO_EXCLUSIVEADDRUSE = DWORD(not SO_REUSEADDR); // disallow local address reuse
{$EXTERNALSYM SO_EXCLUSIVEADDRUSE}
//
// 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}
//
// WinSock 2 extension -- new options
//
SO_GROUP_ID = $2001; // ID of a socket group
{$EXTERNALSYM SO_GROUP_ID}
SO_GROUP_PRIORITY = $2002; // the relative priority within a group
{$EXTERNALSYM SO_GROUP_PRIORITY}
SO_MAX_MSG_SIZE = $2003; // maximum message size
{$EXTERNALSYM SO_MAX_MSG_SIZE}
SO_PROTOCOL_INFOA = $2004; // WSAPROTOCOL_INFOA structure
{$EXTERNALSYM SO_PROTOCOL_INFOA}
SO_PROTOCOL_INFOW = $2005; // WSAPROTOCOL_INFOW structure
{$EXTERNALSYM SO_PROTOCOL_INFOW}
{$IFDEF UNICODE}
SO_PROTOCOL_INFO = SO_PROTOCOL_INFOW;
{$EXTERNALSYM SO_PROTOCOL_INFO}
{$ELSE}
SO_PROTOCOL_INFO = SO_PROTOCOL_INFOA;
{$EXTERNALSYM SO_PROTOCOL_INFO}
{$ENDIF}
PVD_CONFIG = $3001; // configuration info for service provider
{$EXTERNALSYM PVD_CONFIG}
SO_CONDITIONAL_ACCEPT = $3002; // enable true conditional accept:
// connection is not ack-ed to the
// other side until conditional
// function returns CF_ACCEPT
{$EXTERNALSYM SO_CONDITIONAL_ACCEPT}
//
// TCP options.
//
TCP_NODELAY = $0001;
{$EXTERNALSYM TCP_NODELAY}
//
// Address families.
//
AF_UNSPEC = 0; // unspecified
{$EXTERNALSYM AF_UNSPEC}
//
// Although AF_UNSPEC is defined for backwards compatibility, using
// AF_UNSPEC for the "af" parameter when creating a socket is STRONGLY
// DISCOURAGED. The interpretation of the "protocol" parameter
// depends on the actual address family chosen. As environments grow
// to include more and more address families that use overlapping
// protocol values there is more and more chance of choosing an
// undesired address family when AF_UNSPEC is used.
//
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_ATM = 22; // Native ATM Services
{$EXTERNALSYM AF_ATM}
AF_INET6 = 23; // Internetwork Version 6
{$EXTERNALSYM AF_INET6}
AF_CLUSTER = 24; // Microsoft Wolfpack
{$EXTERNALSYM AF_CLUSTER}
AF_12844 = 25; // IEEE 1284.4 WG AF
{$EXTERNALSYM AF_12844}
AF_IRDA = 26; // IrDA
{$EXTERNALSYM AF_IRDA}
AF_NETDES = 28; // Network Designers OSI & gateway enabled protocols
{$EXTERNALSYM AF_NETDES}
AF_TCNPROCESS = 29;
{$EXTERNALSYM AF_TCNPROCESS}
AF_TCNMESSAGE = 30;
{$EXTERNALSYM AF_TCNMESSAGE}
AF_ICLFXBM = 31;
{$EXTERNALSYM AF_ICLFXBM}
AF_MAX = 32;
{$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;
//
// Portable socket structure (RFC 2553).
//
//
// Desired design of maximum size and alignment.
// These are implementation specific.
//
const
_SS_MAXSIZE = 128; // Maximum size.
{$EXTERNALSYM _SS_MAXSIZE}
_SS_ALIGNSIZE = SizeOf(Int64); // Desired alignment.
{$EXTERNALSYM _SS_ALIGNSIZE}
//
// Definitions used for sockaddr_storage structure paddings design.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -