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

📄 winsock2.pas

📁 适用于网络监控,视频聊天,网络VOD等多媒体数据流的网络传输与回放.控件包目前包括三个控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
//-------------------------------------------------------------
//
//       Borland Delphi Runtime Library
//       <API> interface unit
//
// Portions created by Microsoft are
// Copyright (C) 1995-1999 Microsoft Corporation.
// All Rights Reserved.
//
// The original file is: Winsock2.h from CBuilder5 distribution.
// The original Pascal code is: winsock2.pas, released 04 Mar 2000.
// The initial developer of the Pascal code is Alex Konshin
// (alexk@mtgroup.ru).
//
// Portions created by Alex Konshin are
// Copyright (C) 1998-2000 Alex Konshin
//
// Contributor(s): Alex Konshin
//
//       Obtained through:
//
//       Joint Endeavour of Delphi Innovators (Project JEDI)
//
// You may retrieve the latest version of this file at the Project
// JEDI home page, located at http://delphi-jedi.org
//
// The contents of this file are used with permission, subject to
// the Mozilla Public License Version 1.1 (the "License"); you may
// not use this file except in compliance with the License. You may
// obtain a copy of the License at
// http://www.mozilla.org/MPL/MPL-1.1.html
//
// Software distributed under the License is distributed on an
// "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
// implied. See the License for the specific language governing
// rights and limitations under the License.
//
//-------------------------------------------------------------

{ Winsock2.h -- definitions to be used with the WinSock 2 DLL and WinSock 2 applications.
  This header file corresponds to version 2.2.x of the WinSock API specification.
  This file includes parts which are Copyright (c) 1982-1986 Regents
  of the University of California. All rights reserved.
  The Berkeley Software License Agreement specifies the terms and
  conditions for redistribution. }

// converted by Alex Konshin, mailto:alexk@mtgroup.ru
// modified March,4 2000

unit WinSock2;

interface

uses SysUtils, Windows;

{$ALIGN OFF}
{$RANGECHECKS OFF}
{$WRITEABLECONST OFF}
//  Define the current Winsock version. To build an earlier Winsock version
//  application redefine this value prior to including Winsock2.h
const
  WINSOCK_VERSION = $0202;
  WINSOCK2_DLL = 'ws2_32.dll';

type
  u_char = Byte;
  u_short = Word;
  u_int = DWORD;
  u_long = DWORD;

  // The new type to be used in all instances which refer to sockets.
  TSocket = u_int;

  WSAEVENT = THandle;
  PWSAEVENT = ^WSAEVENT;
  LPWSAEVENT = PWSAEVENT;
{$IFDEF UNICODE}
  PMBChar = PWideChar;
{$ELSE}
  PMBChar = PChar;
{$ENDIF}

const
  FD_SETSIZE = 64;

type
  PFDSet = ^TFDSet;
  TFDSet = packed record
    fd_count: u_int;
    fd_array: array[0..FD_SETSIZE - 1] of TSocket;
  end;

  PTimeVal = ^TTimeVal;
  TTimeVal = packed record
    tv_sec: Longint;
    tv_usec: Longint;
  end;

const
  IOCPARM_MASK = $7F;
  IOC_VOID = $20000000;
  IOC_OUT = $40000000;
  IOC_IN = $80000000;
  IOC_INOUT = (IOC_IN or IOC_OUT);

  // get # bytes to read
  FIONREAD = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('f') shl 8) or 127;
  // set/clear non-blocking i/o
  FIONBIO = IOC_IN or (SizeOf(Longint) shl 16) or (Ord('f') shl 8) or 126;
  // set/clear async i/o
  FIOASYNC = IOC_IN or (SizeOf(Longint) shl 16) or (Ord('f') shl 8) or 125;

  //  Socket I/O Controls

  // set high watermark
  SIOCSHIWAT = IOC_IN or (SizeOf(Longint) shl 16) or (Ord('s') shl 8);
  // get high watermark
  SIOCGHIWAT = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('s') shl 8) or 1;
  // set low watermark
  SIOCSLOWAT = IOC_IN or (SizeOf(Longint) shl 16) or (Ord('s') shl 8) or 2;
  // get low watermark
  SIOCGLOWAT = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('s') shl 8) or 3;
  // at oob mark?
  SIOCATMARK = IOC_OUT or (SizeOf(Longint) shl 16) or (Ord('s') shl 8) or 7;

  //  Structures returned by network data base library, taken from the
  //  BSD file netdb.h.  All addresses are supplied in host order, and
  //  returned in network order (suitable for use in system calls).
type
  PHostEnt = ^THostEnt;
  THostEnt = packed record
    h_name: PChar; // official name of host
    h_aliases: ^PChar; // alias list
    h_addrtype: Smallint; // host address type
    h_length: Smallint; // length of address
    case Byte of
      0: (h_addr_list: ^PChar); // list of addresses
      1: (h_addr: ^PChar); // address, for backward compat
  end;

  //  It is assumed here that a network number
  //  fits in 32 bits.
  PNetEnt = ^TNetEnt;
  TNetEnt = packed record
    n_name: PChar; // official name of net
    n_aliases: ^PChar; // alias list
    n_addrtype: Smallint; // net address type
    n_net: u_long; // network #
  end;

  PServEnt = ^TServEnt;
  TServEnt = packed record
    s_name: PChar; // official service name
    s_aliases: ^PChar; // alias list
    s_port: Smallint; // protocol to use
    s_proto: PChar; // port #
  end;

  PProtoEnt = ^TProtoEnt;
  TProtoEnt = packed record
    p_name: PChar; // official protocol name
    p_aliases: ^Pchar; // alias list
    p_proto: Smallint; // protocol #
  end;

  // Constants and structures defined by the internet system,
  // Per RFC 790, September 1981, taken from the BSD file netinet/in.h.
const

  // Protocols
  IPPROTO_IP = 0; // dummy for IP
  IPPROTO_ICMP = 1; // control message protocol
  IPPROTO_IGMP = 2; // group management protocol
  IPPROTO_GGP = 3; // gateway^2 (deprecated)
  IPPROTO_TCP = 6; // TCP
  IPPROTO_PUP = 12; // pup
  IPPROTO_UDP = 17; // UDP - user datagram protocol
  IPPROTO_IDP = 22; // xns idp
  IPPROTO_ND = 77; // UNOFFICIAL net disk proto

  IPPROTO_RAW = 255; // raw IP packet
  IPPROTO_MAX = 256;

  // Port/socket numbers: network standard functions
  IPPORT_ECHO = 7;
  IPPORT_DISCARD = 9;
  IPPORT_SYSTAT = 11;
  IPPORT_DAYTIME = 13;
  IPPORT_NETSTAT = 15;
  IPPORT_FTP = 21;
  IPPORT_TELNET = 23;
  IPPORT_SMTP = 25;
  IPPORT_TIMESERVER = 37;
  IPPORT_NAMESERVER = 42;
  IPPORT_WHOIS = 43;
  IPPORT_MTP = 57;

  // Port/socket numbers: host specific functions
  IPPORT_TFTP = 69;
  IPPORT_RJE = 77;
  IPPORT_FINGER = 79;
  IPPORT_TTYLINK = 87;
  IPPORT_SUPDUP = 95;

  // UNIX TCP sockets
  IPPORT_EXECSERVER = 512;
  IPPORT_LOGINSERVER = 513;
  IPPORT_CMDSERVER = 514;
  IPPORT_EFSSERVER = 520;

  // UNIX UDP sockets
  IPPORT_BIFFUDP = 512;
  IPPORT_WHOSERVER = 513;
  IPPORT_ROUTESERVER = 520;

  // Ports < IPPORT_RESERVED are reserved for  privileged processes (e.g. root).
  IPPORT_RESERVED = 1024;

  // Link numbers
  IMPLINK_IP = 155;
  IMPLINK_LOWEXPER = 156;
  IMPLINK_HIGHEXPER = 158;

  TF_DISCONNECT = $01;
  TF_REUSE_SOCKET = $02;
  TF_WRITE_BEHIND = $04;

  // This is used instead of -1, since the TSocket type is unsigned.
  INVALID_SOCKET = TSocket(not (0));
  SOCKET_ERROR = -1;

  //  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;

  // Types
  SOCK_STREAM = 1; { stream socket }
  SOCK_DGRAM = 2; { datagram socket }
  SOCK_RAW = 3; { raw-protocol interface }
  SOCK_RDM = 4; { reliably-delivered message }
  SOCK_SEQPACKET = 5; { sequenced packet stream }

  // Option flags per-socket.
  SO_DEBUG = $0001; // turn on debugging info recording
  SO_ACCEPTCONN = $0002; // socket has had listen()
  SO_REUSEADDR = $0004; // allow local address reuse
  SO_KEEPALIVE = $0008; // keep connections alive
  SO_DONTROUTE = $0010; // just use interface addresses
  SO_BROADCAST = $0020; // permit sending of broadcast msgs
  SO_USELOOPBACK = $0040; // bypass hardware when possible
  SO_LINGER = $0080; // linger on close if data present
  SO_OOBINLINE = $0100; // leave received OOB data in line

  SO_DONTLINGER = not SO_LINGER;
  SO_EXCLUSIVEADDRUSE = not SO_REUSEADDR; // disallow local address reuse

  // Additional options.

  SO_SNDBUF = $1001; // send buffer size
  SO_RCVBUF = $1002; // receive buffer size
  SO_SNDLOWAT = $1003; // send low-water mark
  SO_RCVLOWAT = $1004; // receive low-water mark
  SO_SNDTIMEO = $1005; // send timeout
  SO_RCVTIMEO = $1006; // receive timeout
  SO_ERROR = $1007; // get error status and clear
  SO_TYPE = $1008; // get socket 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;
  SO_CONNOPT = $7001;
  SO_DISCDATA = $7002;
  SO_DISCOPT = $7003;
  SO_CONNDATALEN = $7004;
  SO_CONNOPTLEN = $7005;
  SO_DISCDATALEN = $7006;
  SO_DISCOPTLEN = $7007;

  // Option for opening sockets for synchronous access.
  SO_OPENTYPE = $7008;
  SO_SYNCHRONOUS_ALERT = $10;
  SO_SYNCHRONOUS_NONALERT = $20;

  // Other NT-specific options.
  SO_MAXDG = $7009;
  SO_MAXPATHDG = $700A;
  SO_UPDATE_ACCEPT_CONTEXT = $700B;
  SO_CONNECT_TIME = $700C;

  // TCP options.
  TCP_NODELAY = $0001;
  TCP_BSDURGENT = $7000;

  // WinSock 2 extension -- new options
  SO_GROUP_ID = $2001; // ID of a socket group
  SO_GROUP_PRIORITY = $2002; // the relative priority within a group
  SO_MAX_MSG_SIZE = $2003; // maximum message size
  SO_Protocol_InfoA = $2004; // WSAPROTOCOL_INFOA structure
  SO_Protocol_InfoW = $2005; // WSAPROTOCOL_INFOW structure
{$IFDEF UNICODE}
  SO_Protocol_Info = SO_Protocol_InfoW;
{$ELSE}
  SO_Protocol_Info = SO_Protocol_InfoA;
{$ENDIF}
  PVD_CONFIG = $3001; // configuration info for service provider
  SO_CONDITIONAL_ACCEPT = $3002; // enable true conditional accept:
  // connection is not ack-ed to the
  // other side until conditional
  // function returns CF_ACCEPT

// Address families.
  AF_UNSPEC = 0; // unspecified
  AF_UNIX = 1; // local to host (pipes, portals)
  AF_INET = 2; // internetwork: UDP, TCP, etc.
  AF_IMPLINK = 3; // arpanet imp addresses
  AF_PUP = 4; // pup protocols: e.g. BSP
  AF_CHAOS = 5; // mit CHAOS protocols
  AF_IPX = 6; // IPX and SPX
  AF_NS = AF_IPX; // XEROX NS protocols
  AF_ISO = 7; // ISO protocols
  AF_OSI = AF_ISO; // OSI is ISO
  AF_ECMA = 8; // european computer manufacturers
  AF_DATAKIT = 9; // datakit protocols
  AF_CCITT = 10; // CCITT protocols, X.25 etc
  AF_SNA = 11; // IBM SNA
  AF_DECnet = 12; // DECnet
  AF_DLI = 13; // Direct data link interface
  AF_LAT = 14; // LAT
  AF_HYLINK = 15; // NSC Hyperchannel
  AF_APPLETALK = 16; // AppleTalk
  AF_NETBIOS = 17; // NetBios-style addresses
  AF_VOICEVIEW = 18; // VoiceView
  AF_FIREFOX = 19; // FireFox
  AF_UNKNOWN1 = 20; // Somebody is using this!
  AF_BAN = 21; // Banyan
  AF_ATM = 22; // Native ATM Services
  AF_INET6 = 23; // Internetwork Version 6
  AF_CLUSTER = 24; // Microsoft Wolfpack
  AF_12844 = 25; // IEEE 1284.4 WG AF
  AF_IRDA = 26; // IrDA
  AF_NETDES = 28; // Network Designers OSI & gateway enabled protocols

  AF_MAX = 29;

  // Protocol families, same as address families for now.

  PF_UNSPEC = AF_UNSPEC;
  PF_UNIX = AF_UNIX;
  PF_INET = AF_INET;
  PF_IMPLINK = AF_IMPLINK;
  PF_PUP = AF_PUP;
  PF_CHAOS = AF_CHAOS;

⌨️ 快捷键说明

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