WINSOCK.PAS
上传用户:xdgkgcw
上传日期:2007-01-04
资源大小:92k
文件大小:25k
源码类别:

Delphi控件源码

开发平台:

WINDOWS

  1. {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. Author:       Fran鏾is PIETTE, C.H.R. Citadelle
  3. EMail:        francois.piette@pophost.eunet.be  http://www.rtfm.be/fpiette
  4.               francois.piette@rtfm.be
  5. Creation:     July 18, 1996
  6. Object:       Windows 16bit API Interface Unit for Delphi 1.x and
  7.               compatible with Borland Delphi 2.x Winsock
  8. Support:      Please ask your question in the following newsgroup:
  9.               news://forums.borland.com/borland.public.delphi.vcl.components.using
  10. Legal issues: Copyright (C) 1996, 1997, 1998 by Fran鏾is PIETTE 
  11.               <francois.piette@pophost.be>
  12.               This software is provided 'as-is', without any express or
  13.          implied warranty.  In no event will the author be held liable
  14.               for any  damages arising from the use of this software.
  15.               Permission is granted to anyone to use this software for any
  16.               purpose, including commercial applications, and to alter it
  17.               and redistribute it freely, subject to the following
  18.               restrictions:
  19.               1. The origin of this software must not be misrepresented,
  20.                  you must not claim that you wrote the original software.
  21.                  If you use this software in a product, an acknowledgment
  22.                  in the product documentation would be appreciated but is
  23.                  not required.
  24.               2. Altered source versions must be plainly marked as such, and
  25.                  must not be misrepresented as being the original software.
  26.               3. This notice may not be removed or altered from any source 
  27.                  distribution.
  28. Updates:
  29. Sep 21, 1997 Added $IFDEF to warn Delphi 2 or 3 user that something is wrong
  30.              if they use this file.
  31. Dec 13, 1997 Changed winsocket form 'WINSOCK.DLL' to 'WINSOCK' because Win 3.x
  32.              like thos have it without extension (don't ask me why !)
  33.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
  34. unit Winsock;
  35. interface
  36. {$IFNDEF VER80}
  37.   'This file is for use with Delphi 1 only. Use the Borland provided file'
  38.   'with any other Delphi Version. If you use this file with Delphi 2 or 3'
  39.   'this is probably because your library path is wrong or you have not'
  40.   'restored the directory structure when unzipping the file (you must use'
  41.   'pkunzip option -d to restore the files).'
  42. {$ENDIF}
  43. uses WinTypes, WinProcs;
  44. const
  45.   winsocket = 'WINSOCK';
  46.   { If your application can't find winsock.dll on startup, please try to  }
  47.   { change the preceding line to "winsocket = 'winsock.dll';"             }
  48.   { Also, try upper or lower case letters. Win 3.x is very capricious !   }
  49.   { Misc constants }
  50.   FD_SETSIZE               = 64;
  51.   {
  52.     Commands for ioctlsocket(),  taken from the BSD file fcntl.h.
  53.     Ioctl's have the command encoded in the lower word,
  54.     and the size of any in or out parameters in the upper
  55.     word.  The high 2 bits of the upper word are used
  56.     to encode the in/out status of the parameter; for now
  57.     we restrict parameters to at most 128 bytes.
  58.     0x20000000 distinguishes new & old ioctl's
  59.   }
  60.   IOCPARM_MASK             = $7f;         { parameters must be < 128 bytes }
  61.   IOC_VOID                 = $20000000;   { no parameters }
  62.   IOC_OUT                  = $40000000;   { copy out parameters }
  63.   IOC_IN                   = $80000000;   { copy in parameters }
  64.   IOC_INOUT                = (IOC_IN + IOC_OUT);
  65.   FIONREAD                 = $4004667F;   { get # bytes to read }
  66.   FIONBIO                  = $8004667E;   { set/clear non-blocking i/o }
  67.   FIOASYNC                 = $8004667D;   { set/clear async i/o }
  68.   { Socket I/O Controls }
  69.   SIOCSHIWAT               = $80047300;   { set high watermark }
  70.   SIOCGHIWAT               = $40047301;   { set low watermark }
  71.   SIOCSLOWAT               = $80047302;   { set low watermark }
  72.   SIOCGLOWAT               = $40047303;   { get low watermark }
  73.   SIOCATMARK               = $40047307;   { at oob mark? }
  74.   INADDR_ANY               = $00000000;
  75.   INADDR_LOOPBACK          = $7f000001;
  76.   INADDR_BROADCAST         = $ffffffff;
  77.   INADDR_NONE              = $ffffffff;
  78.   WSADESCRIPTION_LEN       = 256;
  79.   WSASYS_STATUS_LEN        = 128;
  80.   { Protocols }
  81.   IPPROTO_IP         =  0;              { dummy for IP }
  82.   IPPROTO_ICMP       =  1;              { control message protocol }
  83.   IPPROTO_GGP        =  2;              { gateway^2 (deprecated) }
  84.   IPPROTO_TCP        =  6;              { tcp }
  85.   IPPROTO_PUP        =  12;             { pup }
  86.   IPPROTO_UDP        =  17;             { user datagram protocol }
  87.   IPPROTO_IDP        =  22;             { xns idp }
  88.   IPPROTO_ND         =  77;             { UNOFFICIAL net disk proto }
  89.   IPPROTO_RAW        = 255;             { raw IP packet }
  90.   IPPROTO_MAX        = 256;
  91.   { Port/socket numbers: network standard functions }
  92.   IPPORT_ANY         =     0;
  93.   IPPORT_ECHO        =     7;
  94.   IPPORT_DISCARD     =     9;
  95.   IPPORT_SYSTAT      =     11;
  96.   IPPORT_DAYTIME     =     13;
  97.   IPPORT_NETSTAT     =     15;
  98.   IPPORT_FTP         =     21;
  99.   IPPORT_TELNET      =     23;
  100.   IPPORT_SMTP        =     25;
  101.   IPPORT_TIMESERVER  =     37;
  102.   IPPORT_NAMESERVER  =     42;
  103.   IPPORT_WHOIS       =     43;
  104.   IPPORT_MTP         =     57;
  105.   { Port/socket numbers: host specific functions }
  106.   IPPORT_TFTP        =     69;
  107.   IPPORT_RJE         =     77;
  108.   IPPORT_FINGER      =     79;
  109.   IPPORT_TTYLINK     =     87;
  110.   IPPORT_SUPDUP      =     95;
  111.   { UNIX TCP sockets }
  112.   IPPORT_EXECSERVER  =     512;
  113.   IPPORT_LOGINSERVER =     513;
  114.   IPPORT_CMDSERVER   =     514;
  115.   IPPORT_EFSSERVER   =     520;
  116.   { UNIX UDP sockets }
  117.   IPPORT_BIFFUDP     =     512;
  118.   IPPORT_WHOSERVER   =     513;
  119.   IPPORT_ROUTESERVER =     520;
  120.   { Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root) }
  121.   IPPORT_RESERVED    =     1024;
  122.   { Link numbers }
  123.   IMPLINK_IP         =     155;
  124.   IMPLINK_LOWEXPER   =     156;
  125.   IMPLINK_HIGHEXPER  =     158;
  126.   INVALID_SOCKET     =     $ffff;
  127.   SOCKET_ERROR       =     (-1);
  128.   { Types }
  129.   SOCK_STREAM        =  1;              { stream socket }
  130.   SOCK_DGRAM         =  2;              { datagram socket }
  131.   SOCK_RAW           =  3;              { raw-protocol interface }
  132.   SOCK_RDM           =  4;              { reliably-delivered message }
  133.   SOCK_SEQPACKET     =  5;              { sequenced packet stream }
  134.   { Option flags per-socket }
  135.   SO_DEBUG           =  $0001;         { turn on debugging info recording }
  136.   SO_ACCEPTCONN      =  $0002;         { socket has had listen() }
  137.   SO_REUSEADDR       =  $0004;         { allow local address reuse }
  138.   SO_KEEPALIVE       =  $0008;         { keep connections alive }
  139.   SO_DONTROUTE       =  $0010;         { just use interface addresses }
  140.   SO_BROADCAST       =  $0020;         { permit sending of broadcast msgs }
  141.   SO_USELOOPBACK     =  $0040;         { bypass hardware when possible }
  142.   SO_LINGER          =  $0080;         { linger on close if data present }
  143.   SO_OOBINLINE       =  $0100;         { leave received OOB data in line }
  144.   SO_DONTLINGER      = (not SO_LINGER);
  145.  { Additional options }
  146.   SO_SNDBUF          =  $1001;         { send buffer size }
  147.   SO_RCVBUF          =  $1002;         { receive buffer size }
  148.   SO_SNDLOWAT        =  $1003;         { send low-water mark }
  149.   SO_RCVLOWAT        =  $1004;         { receive low-water mark }
  150.   SO_SNDTIMEO        =  $1005;         { send timeout }
  151.   SO_RCVTIMEO        =  $1006;         { receive timeout }
  152.   SO_ERROR           =  $1007;         { get error status and clear }
  153.   SO_TYPE            =  $1008;         { get socket type }
  154.   { TCP options }
  155.   TCP_NODELAY        =  $0001;
  156.   { Address families }
  157.   AF_UNSPEC          =  0;              { unspecified }
  158.   AF_UNIX            =  1;              { local to host (pipes, portals) }
  159.   AF_INET            =  2;              { internetwork: UDP, TCP, etc. }
  160.   AF_IMPLINK         =  3;              { arpanet imp addresses }
  161.   AF_PUP             =  4;              { pup protocols: e.g. BSP }
  162.   AF_CHAOS           =  5;              { mit CHAOS protocols }
  163.   AF_NS              =  6;              { XEROX NS protocols }
  164.   AF_ISO             =  7;              { ISO protocols }
  165.   AF_OSI             =  AF_ISO;         { OSI is ISO }
  166.   AF_ECMA            =  8;              { european computer manufacturers }
  167.   AF_DATAKIT         =  9;              { datakit protocols }
  168.   AF_CCITT           =  10;             { CCITT protocols, X.25 etc }
  169.   AF_SNA             =  11;             { IBM SNA }
  170.   AF_DECnet          =  12;             { DECnet }
  171.   AF_DLI             =  13;             { Direct data link interface }
  172.   AF_LAT             =  14;             { LAT }
  173.   AF_HYLINK          =  15;             { NSC Hyperchannel }
  174.   AF_APPLETALK       =  16;             { AppleTalk }
  175.   AF_NETBIOS         =  17;             { NetBios-style addresses }
  176.   AF_MAX             =  18;
  177.   { Protocol families, same as address families for now }
  178.   PF_UNSPEC          =  AF_UNSPEC;
  179.   PF_UNIX            =  AF_UNIX;
  180.   PF_INET            =  AF_INET;
  181.   PF_IMPLINK         =  AF_IMPLINK;
  182.   PF_PUP             =  AF_PUP;
  183.   PF_CHAOS           =  AF_CHAOS;
  184.   PF_NS              =  AF_NS;
  185.   PF_ISO             =  AF_ISO;
  186.   PF_OSI             =  AF_OSI;
  187.   PF_ECMA            =  AF_ECMA;
  188.   PF_DATAKIT         =  AF_DATAKIT;
  189.   PF_CCITT           =  AF_CCITT;
  190.   PF_SNA             =  AF_SNA;
  191.   PF_DECnet          =  AF_DECnet;
  192.   PF_DLI             =  AF_DLI;
  193.   PF_LAT             =  AF_LAT;
  194.   PF_HYLINK          =  AF_HYLINK;
  195.   PF_APPLETALK       =  AF_APPLETALK;
  196.   PF_MAX             =  AF_MAX;
  197.  { Level number for (get/set)sockopt() to apply to socket itself }
  198.  SOL_SOCKET          =  -1;             { options for socket level }
  199.  { Maximum queue length specifiable by listen }
  200.  SOMAXCONN           =   5;
  201.  MSG_OOB             =   1;             { process out-of-band data }
  202.  MSG_PEEK            =   2;             { peek at incoming message }
  203.  MSG_DONTROUTE       =   4;             { send without using routing tables }
  204.  MSG_MAXIOVLEN       =  16;
  205.  { Define constant based on rfc883, used by gethostbyxxxx() calls }
  206.  MAXGETHOSTSTRUCT    =  1024;
  207.  { Define flags to be used with the WSAAsyncSelect() call }
  208.  FD_READ             =  1;
  209.  FD_WRITE            =  2;
  210.  FD_OOB              =  4;
  211.  FD_ACCEPT           =  8;
  212.  FD_CONNECT          =  16;
  213.  FD_CLOSE            =  32;
  214.  { All Windows Sockets error constants are biased by WSABASEERR fromthe normal }
  215.  WSABASEERR          = 10000;
  216.  { Windows Sockets definitions of regular Microsoft C error constants }
  217.  WSAEINTR            = (WSABASEERR+4);
  218.  WSAEBADF            = (WSABASEERR+9);
  219.  WSAEACCES           = (WSABASEERR+13);
  220.  WSAEFAULT           = (WSABASEERR+14);
  221.  WSAEINVAL           = (WSABASEERR+22);
  222.  WSAEMFILE           = (WSABASEERR+24);
  223.  { Windows Sockets definitions of regular Berkeley error constants }
  224.  WSAEWOULDBLOCK      = (WSABASEERR+35);
  225.  WSAEINPROGRESS      = (WSABASEERR+36);
  226.  WSAEALREADY         = (WSABASEERR+37);
  227.  WSAENOTSOCK         = (WSABASEERR+38);
  228.  WSAEDESTADDRREQ     = (WSABASEERR+39);
  229.  WSAEMSGSIZE         = (WSABASEERR+40);
  230.  WSAEPROTOTYPE       = (WSABASEERR+41);
  231.  WSAENOPROTOOPT      = (WSABASEERR+42);
  232.  WSAEPROTONOSUPPORT  = (WSABASEERR+43);
  233.  WSAESOCKTNOSUPPORT  = (WSABASEERR+44);
  234.  WSAEOPNOTSUPP       = (WSABASEERR+45);
  235.  WSAEPFNOSUPPORT     = (WSABASEERR+46);
  236.  WSAEAFNOSUPPORT     = (WSABASEERR+47);
  237.  WSAEADDRINUSE       = (WSABASEERR+48);
  238.  WSAEADDRNOTAVAIL    = (WSABASEERR+49);
  239.  WSAENETDOWN         = (WSABASEERR+50);
  240.  WSAENETUNREACH      = (WSABASEERR+51);
  241.  WSAENETRESET        = (WSABASEERR+52);
  242.  WSAECONNABORTED     = (WSABASEERR+53);
  243.  WSAECONNRESET       = (WSABASEERR+54);
  244.  WSAENOBUFS          = (WSABASEERR+55);
  245.  WSAEISCONN          = (WSABASEERR+56);
  246.  WSAENOTCONN         = (WSABASEERR+57);
  247.  WSAESHUTDOWN        = (WSABASEERR+58);
  248.  WSAETOOMANYREFS     = (WSABASEERR+59);
  249.  WSAETIMEDOUT        = (WSABASEERR+60);
  250.  WSAECONNREFUSED     = (WSABASEERR+61);
  251.  WSAELOOP            = (WSABASEERR+62);
  252.  WSAENAMETOOLONG     = (WSABASEERR+63);
  253.  WSAEHOSTDOWN        = (WSABASEERR+64);
  254.  WSAEHOSTUNREACH     = (WSABASEERR+65);
  255.  WSAENOTEMPTY        = (WSABASEERR+66);
  256.  WSAEPROCLIM         = (WSABASEERR+67);
  257.  WSAEUSERS           = (WSABASEERR+68);
  258.  WSAEDQUOT           = (WSABASEERR+69);
  259.  WSAESTALE           = (WSABASEERR+70);
  260.  WSAEREMOTE          = (WSABASEERR+71);
  261.  { Extended Windows Sockets error constant definitions }
  262.  WSASYSNOTREADY      = (WSABASEERR+91);
  263.  WSAVERNOTSUPPORTED  = (WSABASEERR+92);
  264.  WSANOTINITIALISED   = (WSABASEERR+93);
  265.  { Authoritative Answer: Host not found }
  266.  WSAHOST_NOT_FOUND   = (WSABASEERR+1001);
  267.  HOST_NOT_FOUND      = WSAHOST_NOT_FOUND;
  268. { Non-Authoritative: Host not found, or SERVERFAIL }
  269.  WSATRY_AGAIN        = (WSABASEERR+1002);
  270.  TRY_AGAIN           = WSATRY_AGAIN;
  271. { Non recoverable errors, FORMERR, REFUSED, NOTIMP }
  272.  WSANO_RECOVERY      = (WSABASEERR+1003);
  273.  NO_RECOVERY         = WSANO_RECOVERY;
  274. { Valid name, no data record of requested type }
  275.  WSANO_DATA          = (WSABASEERR+1004);
  276.  NO_DATA             = WSANO_DATA;
  277. { no address, look for MX record }
  278.  WSANO_ADDRESS       = WSANO_DATA;
  279.  NO_ADDRESS          = WSANO_ADDRESS;
  280. { Windows Sockets errors redefined as regular Berkeley error constants }
  281.  EWOULDBLOCK         = WSAEWOULDBLOCK;
  282.  EINPROGRESS         = WSAEINPROGRESS;
  283.  EALREADY            = WSAEALREADY;
  284.  ENOTSOCK            = WSAENOTSOCK;
  285.  EDESTADDRREQ        = WSAEDESTADDRREQ;
  286.  EMSGSIZE            = WSAEMSGSIZE;
  287.  EPROTOTYPE          = WSAEPROTOTYPE;
  288.  ENOPROTOOPT         = WSAENOPROTOOPT;
  289.  EPROTONOSUPPORT     = WSAEPROTONOSUPPORT;
  290.  ESOCKTNOSUPPORT     = WSAESOCKTNOSUPPORT;
  291.  EOPNOTSUPP          = WSAEOPNOTSUPP;
  292.  EPFNOSUPPORT        = WSAEPFNOSUPPORT;
  293.  EAFNOSUPPORT        = WSAEAFNOSUPPORT;
  294.  EADDRINUSE          = WSAEADDRINUSE;
  295.  EADDRNOTAVAIL       = WSAEADDRNOTAVAIL;
  296.  ENETDOWN            = WSAENETDOWN;
  297.  ENETUNREACH         = WSAENETUNREACH;
  298.  ENETRESET           = WSAENETRESET;
  299.  ECONNABORTED        = WSAECONNABORTED;
  300.  ECONNRESET          = WSAECONNRESET;
  301.  ENOBUFS             = WSAENOBUFS;
  302.  EISCONN             = WSAEISCONN;
  303.  ENOTCONN            = WSAENOTCONN;
  304.  ESHUTDOWN           = WSAESHUTDOWN;
  305.  ETOOMANYREFS        = WSAETOOMANYREFS;
  306.  ETIMEDOUT           = WSAETIMEDOUT;
  307.  ECONNREFUSED        = WSAECONNREFUSED;
  308.  ELOOP               = WSAELOOP;
  309.  ENAMETOOLONG        = WSAENAMETOOLONG;
  310.  EHOSTDOWN           = WSAEHOSTDOWN;
  311.  EHOSTUNREACH        = WSAEHOSTUNREACH;
  312.  ENOTEMPTY           = WSAENOTEMPTY;
  313.  EPROCLIM            = WSAEPROCLIM;
  314.  EUSERS              = WSAEUSERS;
  315.  EDQUOT              = WSAEDQUOT;
  316.  ESTALE              = WSAESTALE;
  317.  EREMOTE             = WSAEREMOTE;
  318. type
  319.   { Basic system type definitions, taken from the BSD file sys/types.h. }
  320.   u_char   = byte;
  321.   u_short  = word;
  322.   u_int    = word;
  323.   u_long   = longint;
  324.   short    = word;
  325.   { low level handle wich refer to sockets }
  326.   TSocket = u_int;
  327.   { Select uses arrays of SOCKETs. }
  328.   TFDSet = packed record
  329.     fd_count : u_short;
  330.     fd_array : array [0..(FD_SETSIZE - 1)] of TSocket;
  331.   end;
  332.   PFDSet = ^TFDSet;
  333.   {  Structure used in select() call, taken from the BSD file sys/time.h. }
  334.   TTimeVal = packed record
  335.     tv_sec  : longint;
  336.     tv_usec : longint;
  337.   end;
  338.   PTimeVal = ^TTimeVal;
  339.   { Structures returned by network data base library, taken from the
  340.     BSD file netdb.h.  All addresses are supplied in host order, and
  341.     returned in network order (suitable for use in system calls). }
  342.   HostEnt = record
  343.     h_name      : PChar;          { official name of host }
  344.     h_aliases   : ^PChar;         { alias list }
  345.     h_addrtype  : short;          { host address type }
  346.     h_length    : short;          { length of address }
  347.     h_addr_list : ^PChar;         { list of addresses }
  348.   end;
  349.   PHostEnt = ^HostEnt;
  350.   NetEnt = record
  351.     n_name     : PChar;           { official name of net }
  352.     n_aliases  : ^PChar;          { alias list }
  353.     n_addrtype : short;           { net address type }
  354.     n_net      : u_long;          {  network # }
  355.   end;
  356.   PNetEnt = ^NetEnt;
  357.   ServEnt = record
  358.     s_name    : PChar;            { official service name }
  359.     s_aliases : ^PChar;           { alias list }
  360.     s_port    : integer;          { port # }
  361.     s_proto   : PChar;            { protocol to use }
  362.   end;
  363.   PServEnt = ^ServEnt;
  364.   Protoent = record
  365.     p_name    : PChar;            { official protocol name }
  366.     p_aliases : ^PChar;           { alias list }
  367.     p_proto   : integer;          { protocol # }
  368.   end;
  369.   Pprotoent = ^protoent;
  370.   {  Internet address (old style... should be updated) }
  371.   SunB = packed record
  372.     s_b1, s_b2, s_b3, s_b4: u_char;
  373.   end;
  374.   SunW = packed record
  375.     s_w1, s_w2: u_short;
  376.   end;
  377.   TInAddr = packed record
  378.     case integer of
  379.       0: (S_un_b: SunB);
  380.       1: (S_un_w: SunW);
  381.       2: (S_addr: u_long);
  382.   end;
  383.   PInAddr = ^TInAddr;
  384.   { Socket address, internet style. }
  385.   TSockAddrIn = packed record
  386.     case integer of
  387.     0: (sin_family : u_short;
  388.         sin_port   : u_short;
  389.         sin_addr   : TInAddr;
  390.         sin_zero   : array[0..7] of char);
  391.     1: (sa_family: u_short;
  392.         sa_data: array [0..13] of char);
  393.   end;
  394.   PSockAddrIn = ^TSockAddrIn;
  395.   TSockAddr   = TSockAddrIn;
  396.   PWSADATA = ^TWSADATA;
  397.   TWSADATA = packed record
  398.     wVersion       : word;
  399.     wHighVersion   : word;
  400.     szDescription  : array [0..WSADESCRIPTION_LEN] of char;
  401.     szSystemStatus : array [0..WSASYS_STATUS_LEN] of char;
  402.     iMaxSockets    : u_short;
  403.     iMaxUdpDg      : u_short;
  404.     lpVendorInfo   : PChar;
  405.   end;
  406.   { Structure used by kernel to pass protocol information in raw sockets. }
  407.   TSockProto = packed record
  408.     sp_family   : u_short;
  409.     sp_protocol : u_short;
  410.   end;
  411.   {  Structure used for manipulating linger option. }
  412.   TLinger = packed record
  413.     l_onoff  : u_short;
  414.     l_linger : u_short;
  415.   end;
  416. { Socket function prototypes }
  417. function accept(s: TSocket; var addr: TSockAddr; var addrlen: Integer): TSocket;
  418. function bind(s: TSocket; var addr: TSockAddr; namelen: Integer): Integer;
  419. function closesocket(s: TSocket): Integer;
  420. function connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer;
  421. function ioctlsocket(s: TSocket; cmd: Longint; var arg: u_long): Integer;
  422. function getpeername(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer;
  423. function getsockname(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer;
  424. function getsockopt(s: TSocket; level, optname: Integer; optval: PChar; var optlen: Integer): Integer;
  425. function htonl(hostlong: u_long): u_long;
  426. function htons(hostshort: u_short): u_short;
  427. function inet_addr(cp: PChar): u_long;
  428. function inet_ntoa(inaddr: TInAddr): PChar;
  429. function listen(s: TSocket; backlog: Integer): Integer; 
  430. function ntohl(netlong: u_long): u_long; 
  431. function ntohs(netshort: u_short): u_short; 
  432. function recv(s: TSocket; var Buf; len, flags: Integer): Integer;
  433. function recvfrom(s: TSocket; var Buf; len, flags: Integer;
  434.   var from: TSockAddr; var fromlen: Integer): Integer; 
  435. function select(nfds: Integer; readfds, writefds, exceptfds: PFDSet;
  436.   timeout: PTimeVal): Longint;
  437. function send(s: TSocket; var Buf; len, flags: Integer): Integer; 
  438. function sendto(s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr;
  439.   tolen: Integer): Integer; 
  440. function setsockopt(s: TSocket; level, optname: Integer; optval: PChar;
  441.   optlen: Integer): Integer; 
  442. function shutdown(s: TSocket; how: Integer): Integer; 
  443. function socket(af, struct, protocol: Integer): TSocket;
  444. function gethostbyaddr(addr: Pointer; len, struct: Integer): PHostEnt;
  445. function gethostbyname(name: PChar): PHostEnt;
  446. function gethostname(name: PChar; len: Integer): Integer;
  447. function getservbyport(port: Integer; proto: PChar): PServEnt;
  448. function getservbyname(name, proto: PChar): PServEnt;
  449. function getprotobynumber(proto: Integer): PProtoEnt;
  450. function getprotobyname(name: PChar): PProtoEnt;
  451. function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer; 
  452. function WSACleanup: Integer; 
  453. procedure WSASetLastError(iError: Integer); 
  454. function WSAGetLastError: Integer;
  455. function WSAIsBlocking: BOOL; 
  456. function WSAUnhookBlockingHook: Integer;
  457. function WSASetBlockingHook(lpBlockFunc: TFarProc): TFarProc;
  458. function WSACancelBlockingCall: Integer;
  459. function WSAAsyncGetServByName(HWindow: HWND; wMsg: u_int; 
  460.   name, proto, buf: PChar; buflen: Integer): THandle; 
  461. function WSAAsyncGetServByPort( HWindow: HWND; wMsg, port: u_int;
  462.   proto, buf: PChar; buflen: Integer): THandle; 
  463. function WSAAsyncGetProtoByName(HWindow: HWND; wMsg: u_int;
  464.   name, buf: PChar; buflen: Integer): THandle; 
  465. function WSAAsyncGetProtoByNumber(HWindow: HWND; wMsg: u_int; number: Integer;
  466.   buf: PChar; buflen: Integer): THandle;
  467. function WSAAsyncGetHostByName(HWindow: HWND; wMsg: u_int;
  468.   name, buf: PChar; buflen: Integer): THandle;
  469. function WSAAsyncGetHostByAddr(HWindow: HWND; wMsg: u_int; addr: PChar;
  470.   len, struct: Integer; buf: PChar; buflen: Integer): THandle;
  471. function WSACancelAsyncRequest(hAsyncTaskHandle: THandle): Integer;
  472. function WSAAsyncSelect(s: TSocket; HWindow: HWND; wMsg: u_int; lEvent: Longint): Integer;
  473. function WSARecvEx(s: TSocket; var buf; len: Integer; var flags: Integer): Integer;
  474. function WSAMakeSyncReply(Buflen, Error: Word): Longint;
  475. function WSAMakeSelectReply(Event, Error: Word): Longint;
  476. function WSAGetAsyncBuflen(Param: Longint): Word;
  477. function WSAGetAsyncError(Param: Longint): Word;
  478. function WSAGetSelectEvent(Param: Longint): Word;
  479. function WSAGetSelectError(Param: Longint): Word;
  480. implementation
  481. function WSAMakeSyncReply;
  482. begin
  483.   WSAMakeSyncReply:= MakeLong(Buflen, Error);
  484. end;
  485. function WSAMakeSelectReply;
  486. begin
  487.   WSAMakeSelectReply:= MakeLong(Event, Error);
  488. end;
  489. function WSAGetAsyncBuflen;
  490. begin
  491.   WSAGetAsyncBuflen:= LOWORD(Param);
  492. end;
  493. function WSAGetAsyncError;
  494. begin
  495.   WSAGetAsyncError:= HIWORD(Param);
  496. end;
  497. function WSAGetSelectEvent;
  498. begin
  499.   WSAGetSelectEvent:= LOWORD(Param);
  500. end;
  501. function WSAGetSelectError;
  502. begin
  503.   WSAGetSelectError:= HIWORD(Param);
  504. end;
  505. function accept;            external    winsocket name 'accept';
  506. function bind;              external    winsocket name 'bind';
  507. function closesocket;       external    winsocket name 'closesocket';
  508. function connect;           external    winsocket name 'connect';
  509. function getpeername;       external    winsocket name 'getpeername';
  510. function getsockname;       external    winsocket name 'getsockname';
  511. function getsockopt;        external    winsocket name 'getsockopt';
  512. function htonl;             external    winsocket name 'htonl';
  513. function htons;             external    winsocket name 'htons';
  514. function inet_addr;         external    winsocket name 'inet_addr';
  515. function inet_ntoa;         external    winsocket name 'inet_ntoa';
  516. function ioctlsocket;       external    winsocket name 'ioctlsocket';
  517. function listen;            external    winsocket name 'listen';
  518. function ntohl;             external    winsocket name 'ntohl';
  519. function ntohs;             external    winsocket name 'ntohs';
  520. function recv;              external    winsocket name 'recv';
  521. function recvfrom;          external    winsocket name 'recvfrom';
  522. function select;            external    winsocket name 'select';
  523. function send;              external    winsocket name 'send';
  524. function sendto;            external    winsocket name 'sendto';
  525. function setsockopt;        external    winsocket name 'setsockopt';
  526. function shutdown;          external    winsocket name 'shutdown';
  527. function socket;            external    winsocket name 'socket';
  528. function gethostbyaddr;     external    winsocket name 'gethostbyaddr';
  529. function gethostbyname;     external    winsocket name 'gethostbyname';
  530. function getprotobyname;    external    winsocket name 'getprotobyname';
  531. function getprotobynumber;  external    winsocket name 'getprotobynumber';
  532. function getservbyname;     external    winsocket name 'getservbyname';
  533. function getservbyport;     external    winsocket name 'getservbyport';
  534. function gethostname;       external    winsocket name 'gethostname';
  535. function WSAAsyncSelect;        external winsocket name 'WSAAsyncSelect';
  536. function WSARecvEx;             external winsocket name 'WSARecvEx';
  537. function WSAAsyncGetHostByAddr; external winsocket name 'WSAAsyncGetHostByAddr';
  538. function WSAAsyncGetHostByName; external winsocket name 'WSAAsyncGetHostByName';
  539. function WSAAsyncGetProtoByNumber; external winsocket name 'WSAAsyncGetProtoByNumber';
  540. function WSAAsyncGetprotoByName; external winsocket name 'WSAAsyncGetprotoByName';
  541. function WSAAsyncGetServByPort; external winsocket name 'WSAAsyncGetServByPort';
  542. function WSAAsyncGetServByName; external winsocket name 'WSAAsyncGetServByName';
  543. function WSACancelAsyncRequest; external winsocket name 'WSACancelAsyncRequest';
  544. function WSASetBlockingHook;    external winsocket name 'WSASetBlockingHook';
  545. function WSAUnhookBlockingHook; external winsocket name 'WSAUnhookBlockingHook';
  546. function WSAGetLastError;       external winsocket name 'WSAGetLastError';
  547. procedure WSASetLastError;      external winsocket name 'WSASetLastError';
  548. function WSACancelBlockingCall; external winsocket name 'WSACancelBlockingCall';
  549. function WSAIsBlocking;         external winsocket name 'WSAIsBlocking';
  550. function WSAStartup;            external winsocket name 'WSAStartup';
  551. function WSACleanup;            external winsocket name 'WSACleanup';
  552. end.