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

📄 sockdef.pas

📁 提供串行口存取的 Object Pascal 类 ( 1.2 版
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  NO_DATA                 = WSANO_DATA;

{ no address, look for MX record }

  WSANO_ADDRESS           = WSANO_DATA;
  NO_ADDRESS              = WSANO_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. }

  EWOULDBLOCK        =  WSAEWOULDBLOCK;
  EINPROGRESS        =  WSAEINPROGRESS;
  EALREADY           =  WSAEALREADY;
  ENOTSOCK           =  WSAENOTSOCK;
  EDESTADDRREQ       =  WSAEDESTADDRREQ;
  EMSGSIZE           =  WSAEMSGSIZE;
  EPROTOTYPE         =  WSAEPROTOTYPE;
  ENOPROTOOPT        =  WSAENOPROTOOPT;
  EPROTONOSUPPORT    =  WSAEPROTONOSUPPORT;
  ESOCKTNOSUPPORT    =  WSAESOCKTNOSUPPORT;
  EOPNOTSUPP         =  WSAEOPNOTSUPP;
  EPFNOSUPPORT       =  WSAEPFNOSUPPORT;
  EAFNOSUPPORT       =  WSAEAFNOSUPPORT;
  EADDRINUSE         =  WSAEADDRINUSE;
  EADDRNOTAVAIL      =  WSAEADDRNOTAVAIL;
  ENETDOWN           =  WSAENETDOWN;
  ENETUNREACH        =  WSAENETUNREACH;
  ENETRESET          =  WSAENETRESET;
  ECONNABORTED       =  WSAECONNABORTED;
  ECONNRESET         =  WSAECONNRESET;
  ENOBUFS            =  WSAENOBUFS;
  EISCONN            =  WSAEISCONN;
  ENOTCONN           =  WSAENOTCONN;
  ESHUTDOWN          =  WSAESHUTDOWN;
  ETOOMANYREFS       =  WSAETOOMANYREFS;
  ETIMEDOUT          =  WSAETIMEDOUT;
  ECONNREFUSED       =  WSAECONNREFUSED;
  ELOOP              =  WSAELOOP;
  ENAMETOOLONG       =  WSAENAMETOOLONG;
  EHOSTDOWN          =  WSAEHOSTDOWN;
  EHOSTUNREACH       =  WSAEHOSTUNREACH;
  ENOTEMPTY          =  WSAENOTEMPTY;
  EPROCLIM           =  WSAEPROCLIM;
  EUSERS             =  WSAEUSERS;
  EDQUOT             =  WSAEDQUOT;
  ESTALE             =  WSAESTALE;
  EREMOTE            =  WSAEREMOTE;

  SockAddr_Len       = 16;
  In_Addr_Len        =  4;
  InAddr_Any         =  0;
  InAddr_Loopback    = $7F000001;
  InAddr_Broadcast   = $FFFFFFFF;
  InAddr_None        = $FFFFFFFF;

  SOCK_NULL      =  0;
  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

  IPPROTO_NULL   =  0;
  IPPROTO_UDP    =  17;
  IPPROTO_TCP    =  6;


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

{$IFNDEF LINUX}
  FIONREAD     = IOC_OUT or { get # bytes to read }
    ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
    (Longint(Byte('f')) shl 8) or 127;
  FIONBIO      = IOC_IN or { set/clear non-blocking i/o }
    ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
    (Longint(Byte('f')) shl 8) or 126;
  FIOASYNC     = IOC_IN or { set/clear async i/o }
    ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
    (Longint(Byte('f')) shl 8) or 125;
{$ENDIF}

type
  pLongInt = ^LongInt;

  pIoVec = ^tIoVec;
  tIoVec = packed record
    iov_base: POINTER;
    iov_len: LongInt;
  end;

(*
** Structure used for manipulating linger option.
*)
  tLinger = packed record
    l_onoff: LongInt;                // option on/off
    l_linger: LongInt;               // linger time
  END;

(*
** Structure used by kernel to pass protocol
** information in raw sockets.
*)

  tSockProto = packed record
    sp_family: WORD;              // address family
    sp_protocol: WORD;            // protocol
  END;

  off_t = LongInt;

  tuio = packed record
    uio_iov: pIoVec;
    uio_iovcnt: LongInt;
    uio_offset: off_t;
    uio_segflg: LongInt;
    uio_resid: LongInt;
  END;

  pIn_Addr = ^tIn_Addr;
  tIn_Addr = packed record
             case integer of
               0: (IPAddr:   ULong);
               1: (ClassA:   byte;
                   ClassB:   byte;
                   ClassC:   byte;
                   ClassD:   byte)
             end;

(*
** Structure used by kernel to store most
** addresses.
*)
  pSockAddr=^tSockAddr;
  tSockAddr=packed record
            case integer of
              0: (Sin_Family: SmallWord;
                  Sin_Port:   SmallWord;
                  Sin_Addr:   tIn_Addr;
                  Sin_Zero:   array[1.. 8] of byte);
              1: (Sa_Family:  SmallWord;
                  Sa_Addr:    array[1..14] of byte);
            end;

(*
** Message header for recvmsg and sendmsg calls.
*)
  pMsgHdr = ^tMsgHdr;
  tMsgHdr = packed record
    msg_name: pChar;               // optional address
    msg_namelen: LongInt;            // size of address
    msg_iov: pIoVec;         // scatter/gather array
    msg_iovlen: LongInt;             // # elements in msg_iov
    msg_accrights: pChar;          // access rights sent/received
    msg_accrightslen: LongInt;
  END;

  uio_rw = ( UIO_READ, UIO_WRITE );

  pHostEnt = ^tHostEnt;
  tHostEnt = packed record
    H_Name:      ^string;
    H_Alias:     pointer;
{$IFNDEF WIN32}
    H_AddrType:  longint;
    H_Length:    longint;
{$ELSE}
    h_addrtype: Smallint;
    h_length: Smallint;
{$ENDIF}
    H_Addr_List: ^pIn_Addr;
  END;

  pProtoEnt = ^tProtoEnt;
  TProtoEnt = packed record
    p_name:    pChar;     (* official protocol name *)
    p_aliases: ^pChar;   (* alias list *)
    p_proto:   SmallInt;       (* protocol # *)
  end;

  pServEnt = ^tServEnt;
  tServEnt = packed record
    s_name:    pChar;        // official service name
    s_aliases: ^pChar;       // alias list
    s_port:    SmallInt;      // port #
    s_proto:   pChar;        // protocol to use
  END;

// these types are only used in windows version
const
  FD_SETSIZE     =   64;

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

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

const
  WSADESCRIPTION_LEN     =   256;
  WSASYS_STATUS_LEN      =   128;

type
  PWSAData = ^TWSAData;
  TWSAData = packed 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;

(*
** The re-defination of error constants are necessary to avoid conflict with
** standard IBM C Set/2 V1.0 error constants.
**
** All OS/2 SOCKET API error constants are biased by SOCBASEERR from the "normal"
**
*)

const
  SOCBASEERR = 10000;

(*
** OS/2 SOCKET API definitions of regular Microsoft C 6.0 error constants
*)

const
  SOCEPERM = (SOCBASEERR+1);             (* Not owner *)
  SOCESRCH = (SOCBASEERR+3);             (* No such process *)
  SOCEINTR = (SOCBASEERR+4);             (* Interrupted system call *)
  SOCENXIO = (SOCBASEERR+6);             (* No such device or address *)
  SOCEBADF = (SOCBASEERR+9);             (* Bad file number *)
  SOCEACCES = (SOCBASEERR+13);            (* Permission denied *)
  SOCEFAULT = (SOCBASEERR+14);            (* Bad address *)
  SOCEINVAL = (SOCBASEERR+22);            (* Invalid argument *)
  SOCEMFILE = (SOCBASEERR+24);            (* Too many open files *)
  SOCEPIPE = (SOCBASEERR+32);            (* Broken pipe *)

  SOCEOS2ERR = (SOCBASEERR+100);            (* OS/2 Error *)

(*
** OS/2 SOCKET API definitions of regular BSD error constants
*)

const
  SOCEWOULDBLOCK = (SOCBASEERR+35);            (* Operation would block *)
  SOCEINPROGRESS = (SOCBASEERR+36);            (* Operation now in progress *)
  SOCEALREADY = (SOCBASEERR+37);            (* Operation already in progress *)
  SOCENOTSOCK = (SOCBASEERR+38);            (* Socket operation on non-socket *)
  SOCEDESTADDRREQ = (SOCBASEERR+39);            (* Destination address required *)
  SOCEMSGSIZE = (SOCBASEERR+40);            (* Message too long *)
  SOCEPROTOTYPE = (SOCBASEERR+41);            (* Protocol wrong type for socket *)
  SOCENOPROTOOPT = (SOCBASEERR+42);            (* Protocol not available *)
  SOCEPROTONOSUPPORT = (SOCBASEERR+43);            (* Protocol not supported *)
  SOCESOCKTNOSUPPORT = (SOCBASEERR+44);            (* Socket type not supported *)
  SOCEOPNOTSUPP = (SOCBASEERR+45);            (* Operation not supported on socket *)
  SOCEPFNOSUPPORT = (SOCBASEERR+46);            (* Protocol family not supported *)
  SOCEAFNOSUPPORT = (SOCBASEERR+47);            (* Address family not supported by protocol family *)
  SOCEADDRINUSE = (SOCBASEERR+48);            (* Address already in use *)
  SOCEADDRNOTAVAIL = (SOCBASEERR+49);            (* Can't assign requested address *)
  SOCENETDOWN = (SOCBASEERR+50);            (* Network is down *)
  SOCENETUNREACH = (SOCBASEERR+51);            (* Network is unreachable *)
  SOCENETRESET = (SOCBASEERR+52);            (* Network dropped connection on reset *)
  SOCECONNABORTED = (SOCBASEERR+53);            (* Software caused connection abort *)
  SOCECONNRESET = (SOCBASEERR+54);            (* Connection reset by peer *)
  SOCENOBUFS = (SOCBASEERR+55);            (* No buffer space available *)
  SOCEISCONN = (SOCBASEERR+56);            (* Socket is already connected *)
  SOCENOTCONN = (SOCBASEERR+57);            (* Socket is not connected *)
  SOCESHUTDOWN = (SOCBASEERR+58);            (* Can't send after socket shutdown *)
  SOCETOOMANYREFS = (SOCBASEERR+59);            (* Too many references: can't splice *)
  SOCETIMEDOUT = (SOCBASEERR+60);            (* Connection timed out *)
  SOCECONNREFUSED = (SOCBASEERR+61);            (* Connection refused *)
  SOCELOOP = (SOCBASEERR+62);            (* Too many levels of symbolic links *)
  SOCENAMETOOLONG = (SOCBASEERR+63);            (* File name too long *)
  SOCEHOSTDOWN = (SOCBASEERR+64);            (* Host is down *)
  SOCEHOSTUNREACH = (SOCBASEERR+65);            (* No route to host *)
  SOCENOTEMPTY = (SOCBASEERR+66);            (* Directory not empty *)

(*
** OS/2 SOCKET API errors redefined as regular BSD error constants
*)

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)
 IMPLEMENTATION
(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

end. { unit SockDef }

⌨️ 快捷键说明

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