⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winsock2.pas

📁 适用于网络监控,视频聊天,网络VOD等多媒体数据流的网络传输与回放.控件包目前包括三个控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  LPWSABUF = PWSABUF;

  TServiceType = LongInt;

  TFlowSpec = packed record
    TokenRate, // In Bytes/sec
    TokenBucketSize, // In Bytes
    PeakBandwidth, // In Bytes/sec
    Latency, // In microseconds
    DelayVariation: LongInt; // In microseconds
    ServiceType: TServiceType;
    MaxSduSize, MinimumPolicedSize: LongInt; // In Bytes
  end;
  PFlowSpec = ^TFLOWSPEC;

  QOS = packed record
    SendingFlowspec: TFlowSpec; { the flow spec for data sending }
    ReceivingFlowspec: TFlowSpec; { the flow spec for data receiving }
    ProviderSpecific: WSABUF; { additional provider specific stuff }
  end;
  TQualityOfService = QOS;
  PQOS = ^QOS;
  LPQOS = PQOS;

const
  SERVICETYPE_NOTRAFFIC = $00000000; // No data in this direction
  SERVICETYPE_BESTEFFORT = $00000001; // Best Effort
  SERVICETYPE_CONTROLLEDLOAD = $00000002; // Controlled Load
  SERVICETYPE_GUARANTEED = $00000003; // Guaranteed
  SERVICETYPE_NETWORK_UNAVAILABLE = $00000004; // Used to notify change to user
  SERVICETYPE_GENERAL_INFORMATION = $00000005;
    // corresponds to "General Parameters" defined by IntServ
  SERVICETYPE_NOCHANGE = $00000006;
    // used to indicate that the flow spec contains no change from any previous one
  // to turn on immediate traffic control, OR this flag with the ServiceType field in teh FLOWSPEC
  SERVICE_IMMEDIATE_TRAFFIC_CONTROL = $80000000;

  //  WinSock 2 extension -- manifest constants for return values of the condition function
  CF_ACCEPT = $0000;
  CF_REJECT = $0001;
  CF_DEFER = $0002;

  //  WinSock 2 extension -- manifest constants for shutdown()
  SD_RECEIVE = $00;
  SD_SEND = $01;
  SD_BOTH = $02;

  //  WinSock 2 extension -- data type and manifest constants for socket groups
  SG_UNCONSTRAINED_GROUP = $01;
  SG_CONSTRAINED_GROUP = $02;

type
  GROUP = DWORD;

  //  WinSock 2 extension -- data type for WSAEnumNetworkEvents()
  TWSANetworkEvents = record
    lNetworkEvents: LongInt;
    iErrorCode: array[0..FD_MAX_EVENTS - 1] of Integer;
  end;
  PWSANetworkEvents = ^TWSANetworkEvents;
  LPWSANetworkEvents = PWSANetworkEvents;

  //  WinSock 2 extension -- WSAPROTOCOL_INFO structure

{$IFNDEF ver130}
  TGUID = packed record
    D1: LongInt;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
  end;
  PGUID = ^TGUID;
{$ENDIF}
  LPGUID = PGUID;

  //  WinSock 2 extension -- WSAPROTOCOL_INFO manifest constants
const
  MAX_PROTOCOL_CHAIN = 7;
  BASE_PROTOCOL = 1;
  LAYERED_PROTOCOL = 0;
  WSAPROTOCOL_LEN = 255;

type
  TWSAProtocolChain = record
    ChainLen: Integer; // the length of the chain,
    // length = 0 means layered protocol,
    // length = 1 means base protocol,
    // length > 1 means protocol chain
    ChainEntries: array[0..MAX_PROTOCOL_CHAIN - 1] of LongInt;
      // a list of dwCatalogEntryIds
  end;

type
  TWSAProtocol_InfoA = record
    dwServiceFlags1: LongInt;
    dwServiceFlags2: LongInt;
    dwServiceFlags3: LongInt;
    dwServiceFlags4: LongInt;
    dwProviderFlags: LongInt;
    ProviderId: TGUID;
    dwCatalogEntryId: LongInt;
    ProtocolChain: TWSAProtocolChain;
    iVersion: Integer;
    iAddressFamily: Integer;
    iMaxSockAddr: Integer;
    iMinSockAddr: Integer;
    iSocketType: Integer;
    iProtocol: Integer;
    iProtocolMaxOffset: Integer;
    iNetworkByteOrder: Integer;
    iSecurityScheme: Integer;
    dwMessageSize: LongInt;
    dwProviderReserved: LongInt;
    szProtocol: array[0..WSAPROTOCOL_LEN + 1 - 1] of Char;
  end {TWSAProtocol_InfoA};
  PWSAProtocol_InfoA = ^TWSAProtocol_InfoA;
  LPWSAProtocol_InfoA = PWSAProtocol_InfoA;

  TWSAProtocol_InfoW = record
    dwServiceFlags1: LongInt;
    dwServiceFlags2: LongInt;
    dwServiceFlags3: LongInt;
    dwServiceFlags4: LongInt;
    dwProviderFlags: LongInt;
    ProviderId: TGUID;
    dwCatalogEntryId: LongInt;
    ProtocolChain: TWSAProtocolChain;
    iVersion: Integer;
    iAddressFamily: Integer;
    iMaxSockAddr: Integer;
    iMinSockAddr: Integer;
    iSocketType: Integer;
    iProtocol: Integer;
    iProtocolMaxOffset: Integer;
    iNetworkByteOrder: Integer;
    iSecurityScheme: Integer;
    dwMessageSize: LongInt;
    dwProviderReserved: LongInt;
    szProtocol: array[0..WSAPROTOCOL_LEN + 1 - 1] of WideChar;
  end {TWSAProtocol_InfoW};
  PWSAProtocol_InfoW = ^TWSAProtocol_InfoW;
  LPWSAProtocol_InfoW = PWSAProtocol_InfoW;

{$IFDEF UNICODE}
  WSAProtocol_Info = TWSAProtocol_InfoW;
  TWSAProtocol_Info = TWSAProtocol_InfoW;
  PWSAProtocol_Info = PWSAProtocol_InfoW;
  LPWSAProtocol_Info = PWSAProtocol_InfoW;
{$ELSE}
  WSAProtocol_Info = TWSAProtocol_InfoA;
  TWSAProtocol_Info = TWSAProtocol_InfoA;
  PWSAProtocol_Info = PWSAProtocol_InfoA;
  LPWSAProtocol_Info = PWSAProtocol_InfoA;
{$ENDIF}

const
  //  Flag bit definitions for dwProviderFlags
  PFL_MULTIPLE_PROTO_ENTRIES = $00000001;
  PFL_RECOMMENDED_PROTO_ENTRY = $00000002;
  PFL_HIDDEN = $00000004;
  PFL_MATCHES_PROTOCOL_ZERO = $00000008;

  //  Flag bit definitions for dwServiceFlags1
  XP1_CONNECTIONLESS = $00000001;
  XP1_GUARANTEED_DELIVERY = $00000002;
  XP1_GUARANTEED_ORDER = $00000004;
  XP1_MESSAGE_ORIENTED = $00000008;
  XP1_PSEUDO_STREAM = $00000010;
  XP1_GRACEFUL_CLOSE = $00000020;
  XP1_EXPEDITED_DATA = $00000040;
  XP1_CONNECT_DATA = $00000080;
  XP1_DISCONNECT_DATA = $00000100;
  XP1_SUPPORT_BROADCAST = $00000200;
  XP1_SUPPORT_MULTIPOINT = $00000400;
  XP1_MULTIPOINT_CONTROL_PLANE = $00000800;
  XP1_MULTIPOINT_DATA_PLANE = $00001000;
  XP1_QOS_SUPPORTED = $00002000;
  XP1_INTERRUPT = $00004000;
  XP1_UNI_SEND = $00008000;
  XP1_UNI_RECV = $00010000;
  XP1_IFS_HANDLES = $00020000;
  XP1_PARTIAL_MESSAGE = $00040000;

  BIGENDIAN = $0000;
  LITTLEENDIAN = $0001;

  SECURITY_PROTOCOL_NONE = $0000;

  //  WinSock 2 extension -- manifest constants for WSAJoinLeaf()
  JL_SENDER_ONLY = $01;
  JL_RECEIVER_ONLY = $02;
  JL_BOTH = $04;

  //  WinSock 2 extension -- manifest constants for WSASocket()
  WSA_FLAG_OVERLAPPED = $01;
  WSA_FLAG_MULTIPOINT_C_ROOT = $02;
  WSA_FLAG_MULTIPOINT_C_LEAF = $04;
  WSA_FLAG_MULTIPOINT_D_ROOT = $08;
  WSA_FLAG_MULTIPOINT_D_LEAF = $10;

  //  WinSock 2 extension -- manifest constants for WSAIoctl()
  IOC_UNIX = $00000000;
  IOC_WS2 = $08000000;
  IOC_PROTOCOL = $10000000;
  IOC_VENDOR = $18000000;

  SIO_ASSOCIATE_HANDLE = 1 or IOC_WS2 or IOC_IN;
  SIO_ENABLE_CIRCULAR_QUEUEING = 2 or IOC_WS2;
  SIO_FIND_ROUTE = 3 or IOC_WS2 or IOC_OUT;
  SIO_FLUSH = 4 or IOC_WS2;
  SIO_GET_BROADCAST_ADDRESS = 5 or IOC_WS2 or IOC_OUT;
  SIO_GET_EXTENSION_FUNCTION_POINTER = 6 or IOC_WS2 or IOC_INOUT;
  SIO_GET_QOS = 7 or IOC_WS2 or IOC_INOUT;
  SIO_GET_GROUP_QOS = 8 or IOC_WS2 or IOC_INOUT;
  SIO_MULTIPOINT_LOOPBACK = 9 or IOC_WS2 or IOC_IN;
  SIO_MULTICAST_SCOPE = 10 or IOC_WS2 or IOC_IN;
  SIO_SET_QOS = 11 or IOC_WS2 or IOC_IN;
  SIO_SET_GROUP_QOS = 12 or IOC_WS2 or IOC_IN;
  SIO_TRANSLATE_HANDLE = 13 or IOC_WS2 or IOC_INOUT;
  SIO_ROUTING_INTERFACE_QUERY = 20 or IOC_WS2 or IOC_INOUT;
  SIO_ROUTING_INTERFACE_CHANGE = 21 or IOC_WS2 or IOC_IN;
  SIO_ADDRESS_LIST_QUERY = 22 or IOC_WS2 or IOC_OUT;
    // see below SOCKET_ADDRESS_LIST
  SIO_ADDRESS_LIST_CHANGE = 23 or IOC_WS2;
  SIO_QUERY_TARGET_PNP_HANDLE = 24 or IOC_WS2 or IOC_OUT;

  //  WinSock 2 extension -- manifest constants for SIO_TRANSLATE_HANDLE ioctl
  TH_NETDEV = $00000001;
  TH_TAPI = $00000002;

type

  //  Manifest constants and type definitions related to name resolution and
  //  registration (RNR) API
  TBLOB = packed record
    cbSize: U_LONG;
    pBlobData: PBYTE;
  end;
  PBLOB = ^TBLOB;

  //  Service Install Flags

const
  SERVICE_MULTIPLE = $00000001;

  // & Name Spaces
  NS_ALL = 0;

  NS_SAP = 1;
  NS_NDS = 2;
  NS_PEER_BROWSE = 3;

  NS_TCPIP_LOCAL = 10;
  NS_TCPIP_HOSTS = 11;
  NS_DNS = 12;
  NS_NETBT = 13;
  NS_WINS = 14;

  NS_NBP = 20;

  NS_MS = 30;
  NS_STDA = 31;
  NS_NTDS = 32;

  NS_X500 = 40;
  NS_NIS = 41;
  NS_NISPLUS = 42;

  NS_WRQ = 50;

  NS_NETDES = 60;

  { Resolution flags for WSAGetAddressByName().
    Note these are also used by the 1.1 API GetAddressByName, so leave them around. }
  RES_UNUSED_1 = $00000001;
  RES_FLUSH_CACHE = $00000002;
  RES_SERVICE = $00000004;

  { Well known value names for Service Types }
  SERVICE_TYPE_VALUE_IPXPORTA = 'IpxSocket';
  SERVICE_TYPE_VALUE_IPXPORTW: PWideChar = 'IpxSocket';
  SERVICE_TYPE_VALUE_SAPIDA = 'SapId';
  SERVICE_TYPE_VALUE_SAPIDW: PWideChar = 'SapId';

  SERVICE_TYPE_VALUE_TCPPORTA = 'TcpPort';
  SERVICE_TYPE_VALUE_TCPPORTW: PWideChar = 'TcpPort';

  SERVICE_TYPE_VALUE_UDPPORTA = 'UdpPort';
  SERVICE_TYPE_VALUE_UDPPORTW: PWideChar = 'UdpPort';

  SERVICE_TYPE_VALUE_OBJECTIDA = 'ObjectId';
  SERVICE_TYPE_VALUE_OBJECTIDW: PWideChar = 'ObjectId';

{$IFDEF UNICODE}
  SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDW;
  SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTW;
  SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTW;
  SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDW;
{$ELSE}
  SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDA;
  SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTA;
  SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTA;
  SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDA;
{$ENDIF}

  // SockAddr Information
type
  SOCKET_ADDRESS = packed record
    lpSockaddr: PSockAddr;
    iSockaddrLength: Integer;
  end;
  PSOCKET_ADDRESS = ^SOCKET_ADDRESS;

  // CSAddr Information
  CSADDR_INFO = packed record
    LocalAddr, RemoteAddr: SOCKET_ADDRESS;
    iSocketType, iProtocol: LongInt;
  end;
  PCSADDR_INFO = ^CSADDR_INFO;
  LPCSADDR_INFO = ^CSADDR_INFO;

  // Address list returned via WSAIoctl( SIO_ADDRESS_LIST_QUERY )
  SOCKET_ADDRESS_LIST = packed record
    iAddressCount: Integer;
    Address: array[0..0] of SOCKET_ADDRESS;
  end;
  LPSOCKET_ADDRESS_LIST = ^SOCKET_ADDRESS_LIST;

  // Address Family/Protocol Tuples
  AFProtocols = record
    iAddressFamily: Integer;
    iProtocol: Integer;
  end;
  TAFProtocols = AFProtocols;
  PAFProtocols = ^TAFProtocols;

  //  Client Query API Typedefs

  // The comparators
  TWSAEComparator = (COMP_EQUAL {= 0}, COMP_NOTLESS);

  TWSAVersion = record
    dwVersion: DWORD;
    ecHow: TWSAEComparator;
  end;
  PWSAVersion = ^TWSAVersion;

  TWSAQuerySetA = packed record
    dwSize: DWORD;
    lpszServiceInstanceName: PChar;
    lpServiceClassId: PGUID;
    lpVersion: PWSAVERSION;
    lpszComment: PChar;
    dwNameSpace: DWORD;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -