123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910 |
- {
- $Id$
- This file is part of the Free Pascal run time library.
- This unit contains the declarations for the Win32 Socket Library
- Copyright (c) 1999-2000 by Florian Klaempfl,
- member of the Free Pascal development team.
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$PACKRECORDS 1}
- unit winsock;
- {$ifndef VER0_99_14}
- {$ifndef NO_SMART_LINK}
- {$define support_smartlink}
- {$endif}
- {$endif}
- {$ifdef support_smartlink}
- {$smartlink on}
- {$endif}
- interface
- uses
- windows;
- const
- {
- Default maximium number of sockets.
- this does not
- mean that the underlying Windows Sockets implementation has to
- support that many!
- }
- FD_SETSIZE = 64;
- type
- tOS_INT = LongInt;
- tOS_UINT = DWord;
- ptOS_INT = ^tOS_INT;
- ptOS_UINT = ^tOS_UINT;
- u_char = char;
- u_short = word;
- u_int = tOS_UINT;
- u_long = dword;
- pu_long = ^u_long;
- plongint = ^longint;
- TSocket = u_long;
- { there is already a procedure called FD_SET, so this
- record was renamed (FK) }
- fdset = record
- fd_count : u_int;
- fd_array : array[0..(FD_SETSIZE)-1] of TSocket;
- end;
- TFDSet = fdset;
- PFDSet = ^fdset;
- timeval = record
- tv_sec : longint;
- tv_usec : longint;
- end;
- TTimeVal = timeval;
- PTimeVal = ^TTimeVal;
- { found no reference to this type in c header files and here. AlexS }
- { minutes west of Greenwich }
- { type of dst correction }
- timezone = record
- tz_minuteswest : longint;
- tz_dsttime : longint;
- end;
- TTimeZone = timezone;
- PTimeZone = ^TTimeZone;
- const
- IOCPARM_MASK = $7f;
- IOC_VOID = $20000000;
- IOC_OUT = $40000000;
- IOC_IN = $80000000;
- IOC_INOUT = IOC_IN or IOC_OUT;
- FIONREAD = IOC_OUT or
- ((4 and IOCPARM_MASK) shl 16) or
- (102 shl 8) or 127;
- FIONBIO = IOC_IN or
- ((4 and IOCPARM_MASK) shl 16) or
- (102 shl 8) or 126;
- FIOASYNC = IOC_IN or
- ((4 and IOCPARM_MASK) shl 16) or
- (102 shl 8) or 125;
- {
- 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).
- Slight modifications for differences between Linux and winsock.h
- }
- type
- hostent = record
- { official name of host }
- h_name: pchar;
- { alias list }
- h_aliases: ^pchar;
- { host address type }
- h_addrtype: SmallInt;
- { length of address }
- h_length: SmallInt;
- { list of addresses }
- case byte of
- 0: (h_addr_list: ^pchar);
- 1: (h_addr: ^pchar)
- end;
- THostEnt = hostent;
- PHostEnt = ^THostEnt;
- {
- Assumption here is that a network number
- fits in an unsigned long -- someday that won't be true!
- }
- netent = record
- { official name of net }
- n_name : ^char;
- { alias list }
- n_aliases : ^pchar;
- { net address type }
- n_addrtype : SmallInt;
- n_pad1 : SmallInt; { ensure right packaging }
- { network # }
- n_net : u_long;
- end;
- TNetEnt = netent;
- PNetEnt = ^TNetEnt;
- servent = record
- { official service name }
- s_name : ^char;
- { alias list }
- s_aliases : ^pchar;
- { port # }
- s_port : SmallInt;
- n_pad1 : SmallInt; { ensure right packaging }
- { protocol to use }
- s_proto : ^char;
- end;
- TServEnt = servent;
- PServEnt = ^TServEnt;
- protoent = record
- { official protocol name }
- p_name : ^char;
- { alias list }
- p_aliases : ^pchar;
- { protocol # }
- p_proto : SmallInt;
- p_pad1 : SmallInt; { ensure packaging }
- end;
- TProtoEnt = protoent;
- PProtoEnt = ^TProtoEnt;
- const
- {
- Standard well-known IP protocols.
- For some reason there are differences between Linx and winsock.h
- }
- IPPROTO_IP = 0;
- IPPROTO_ICMP = 1;
- IPPROTO_IGMP = 2;
- IPPROTO_GGP = 3;
- IPPROTO_TCP = 6;
- IPPORT_ECHO = 7;
- IPPORT_DISCARD = 9;
- IPPORT_SYSTAT = 11;
- IPPROTO_PUP = 12;
- IPPORT_DAYTIME = 13;
- IPPORT_NETSTAT = 15;
- IPPROTO_UDP = 17;
- IPPROTO_IDP = 22;
- IPPROTO_ND = 77;
- IPPROTO_RAW = 255;
- IPPROTO_MAX = 256;
- IPPORT_FTP = 21;
- IPPORT_TELNET = 23;
- IPPORT_SMTP = 25;
- IPPORT_TIMESERVER = 37;
- IPPORT_NAMESERVER = 42;
- IPPORT_WHOIS = 43;
- IPPORT_MTP = 57;
- IPPORT_TFTP = 69;
- IPPORT_RJE = 77;
- IPPORT_FINGER = 79;
- IPPORT_TTYLINK = 87;
- IPPORT_SUPDUP = 95;
- IPPORT_EXECSERVER = 512;
- IPPORT_LOGINSERVER = 513;
- IPPORT_CMDSERVER = 514;
- IPPORT_EFSSERVER = 520;
- IPPORT_BIFFUDP = 512;
- IPPORT_WHOSERVER = 513;
- IPPORT_ROUTESERVER = 520;
- IPPORT_RESERVED = 1024;
- const
- IMPLINK_IP = 155;
- IMPLINK_LOWEXPER = 156;
- IMPLINK_HIGHEXPER = 158;
- type
- SunB = packed record
- s_b1,s_b2,s_b3,s_b4 : u_char;
- end;
- SunW = packed record
- s_w1,s_w2 : u_short;
- end;
- in_addr = record
- case integer of
- 0 : (S_un_b : SunB);
- 1 : (S_un_w : SunW);
- 2 : (S_addr : u_long);
- end;
- TInAddr = in_addr;
- PInAddr = ^TInAddr;
- sockaddr_in = record
- case integer of
- 0 : ( (* equals to sockaddr_in, size is 16 byte *)
- sin_family : SmallInt; (* 2 byte *)
- sin_port : u_short; (* 2 byte *)
- sin_addr : TInAddr; (* 4 byte *)
- sin_zero : array[0..8-1] of char; (* 8 byte *)
- );
- 1 : ((* equals to sockaddr, size is 16 byte *)
- sa_family : Smallint; (* 2 byte *)
- sa_data : array[0..14-1] of char; (* 14 byte *)
- );
- end;
- TSockAddrIn = sockaddr_in;
- PSockAddrIn = ^TSockAddrIn;
- TSockAddr = sockaddr_in;
- PSockAddr = ^TSockAddr;
- const
- INADDR_ANY = $00000000;
- INADDR_LOOPBACK = $7F000001;
- INADDR_BROADCAST = $FFFFFFFF;
- IN_CLASSA_NET = $ff000000;
- IN_CLASSA_NSHIFT = 24;
- IN_CLASSA_HOST = $00ffffff;
- IN_CLASSA_MAX = 128;
- IN_CLASSB_NET = $ffff0000;
- IN_CLASSB_NSHIFT = 16;
- IN_CLASSB_HOST = $0000ffff;
- IN_CLASSB_MAX = 65536;
- IN_CLASSC_NET = $ffffff00;
- IN_CLASSC_NSHIFT = 8;
- IN_CLASSC_HOST = $000000ff;
- INADDR_NONE = $ffffffff;
- WSADESCRIPTION_LEN = 256;
- WSASYS_STATUS_LEN = 128;
- type
- WSADATA = record
- wVersion : WORD; { 2 byte, ofs 0 }
- wHighVersion : WORD; { 2 byte, ofs 2 }
- szDescription : array[0..(WSADESCRIPTION_LEN+1)-1] of char; { 257 byte, ofs 4 }
- szSystemStatus : array[0..(WSASYS_STATUS_LEN+1)-1] of char; { 129 byte, ofs 261 }
- iMaxSockets : word; { 2 byte, ofs 390 }
- iMaxUdpDg : word; { 2 byte, ofs 392 }
- pad1 : SmallInt; { 2 byte, ofs 394 } { ensure right packaging }
- lpVendorInfo : pchar; { 4 byte, ofs 396 }
- end; { total size 400 }
- TWSAData = WSADATA;
- PWSAData = TWSAData;
- const
- IP_OPTIONS = 1;
- IP_MULTICAST_IF = 2;
- IP_MULTICAST_TTL = 3;
- IP_MULTICAST_LOOP = 4;
- IP_ADD_MEMBERSHIP = 5;
- IP_DROP_MEMBERSHIP = 6;
- IP_DEFAULT_MULTICAST_TTL = 1;
- IP_DEFAULT_MULTICAST_LOOP = 1;
- IP_MAX_MEMBERSHIPS = 20;
- type
- ip_mreq = record
- imr_multiaddr : in_addr;
- imr_interface : in_addr;
- end;
- {
- Definitions related to sockets: types, address families, options,
- taken from the BSD file sys/socket.h.
- }
- const
- INVALID_SOCKET = longint(not(1));
- SOCKET_ERROR = -1;
- SOCK_STREAM = 1;
- SOCK_DGRAM = 2;
- SOCK_RAW = 3;
- SOCK_RDM = 4;
- SOCK_SEQPACKET = 5;
- { For setsockoptions(2) }
- SO_DEBUG = $0001;
- SO_ACCEPTCONN = $0002;
- SO_REUSEADDR = $0004;
- SO_KEEPALIVE = $0008;
- SO_DONTROUTE = $0010;
- SO_BROADCAST = $0020;
- SO_USELOOPBACK = $0040;
- SO_LINGER = $0080;
- SO_OOBINLINE = $0100;
- {
- Additional options.
- }
- { send buffer size }
- SO_SNDBUF = $1001;
- { receive buffer size }
- SO_RCVBUF = $1002;
- { send low-water mark }
- SO_SNDLOWAT = $1003;
- { receive low-water mark }
- SO_RCVLOWAT = $1004;
- { send timeout }
- SO_SNDTIMEO = $1005;
- { receive timeout }
- SO_RCVTIMEO = $1006;
- { get error status and clear }
- SO_ERROR = $1007;
- { get socket type }
- SO_TYPE = $1008;
- {
- 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;
- {
- Address families.
- }
- { unspecified }
- AF_UNSPEC = 0;
- { local to host (pipes, portals) }
- AF_UNIX = 1;
- { internetwork: UDP, TCP, etc. }
- AF_INET = 2;
- { arpanet imp addresses }
- AF_IMPLINK = 3;
- { pup protocols: e.g. BSP }
- AF_PUP = 4;
- { mit CHAOS protocols }
- AF_CHAOS = 5;
- { IPX and SPX }
- AF_IPX = 6;
- { XEROX NS protocols }
- AF_NS = 6;
- { ISO protocols }
- AF_ISO = 7;
- { OSI is ISO }
- AF_OSI = AF_ISO;
- { european computer manufacturers }
- AF_ECMA = 8;
- { datakit protocols }
- AF_DATAKIT = 9;
- { CCITT protocols, X.25 etc }
- AF_CCITT = 10;
- { IBM SNA }
- AF_SNA = 11;
- { DECnet }
- AF_DECnet = 12;
- { Direct data link interface }
- AF_DLI = 13;
- { LAT }
- AF_LAT = 14;
- { NSC Hyperchannel }
- AF_HYLINK = 15;
- { AppleTalk }
- AF_APPLETALK = 16;
- { NetBios-style addresses }
- AF_NETBIOS = 17;
- { VoiceView }
- AF_VOICEVIEW = 18;
- { FireFox }
- AF_FIREFOX = 19;
- { Somebody is using this! }
- AF_UNKNOWN1 = 20;
- { Banyan }
- AF_BAN = 21;
- AF_MAX = 22;
- type
- {
- Structure used by kernel to pass protocol
- information in raw sockets.
- }
- sockproto = record
- sp_family : u_short;
- sp_protocol : u_short;
- end;
- TSockProto = sockproto;
- PSockProto = ^TSockProto;
- const
- {
- 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;
- PF_NS = AF_NS;
- PF_IPX = AF_IPX;
- PF_ISO = AF_ISO;
- PF_OSI = AF_OSI;
- PF_ECMA = AF_ECMA;
- PF_DATAKIT = AF_DATAKIT;
- PF_CCITT = AF_CCITT;
- PF_SNA = AF_SNA;
- PF_DECnet = AF_DECnet;
- PF_DLI = AF_DLI;
- PF_LAT = AF_LAT;
- PF_HYLINK = AF_HYLINK;
- PF_APPLETALK = AF_APPLETALK;
- PF_VOICEVIEW = AF_VOICEVIEW;
- PF_FIREFOX = AF_FIREFOX;
- PF_UNKNOWN1 = AF_UNKNOWN1;
- PF_BAN = AF_BAN;
- PF_MAX = AF_MAX;
- type
- {
- Structure used for manipulating linger option.
- }
- linger = record
- l_onoff : u_short;
- l_linger : u_short;
- end;
- TLinger = linger;
- PLinger = ^TLinger;
- const
- {
- Level number for (get/set)sockopt() to apply to socket itself.
- }
- { options for socket level }
- SOL_SOCKET = $ffff;
- {
- Maximum queue length specifiable by listen.
- }
- SOMAXCONN = 5;
- { process out-of-band data }
- MSG_OOB = $1;
- { peek at incoming message }
- MSG_PEEK = $2;
- { send without using routing tables }
- MSG_DONTROUTE = $4;
- MSG_MAXIOVLEN = 16;
- { partial send or recv for message xport }
- MSG_PARTIAL = $8000;
- {
- Define constant based on rfc883, used by gethostbyxxxx() calls.
- }
- MAXGETHOSTSTRUCT = 1024;
- MAXHOSTNAMELEN = MAXGETHOSTSTRUCT;
- {
- Define flags to be used with the WSAAsyncSelect() call.
- }
- FD_READ = $01;
- FD_WRITE = $02;
- FD_OOB = $04;
- FD_ACCEPT = $08;
- FD_CONNECT = $10;
- FD_CLOSE = $20;
- {
- All Windows Sockets error constants are biased by WSABASEERR from
- the "normal"
- }
- WSABASEERR = 10000;
- {
- Windows Sockets definitions of regular Microsoft C error constants
- }
- WSAEINTR = WSABASEERR + 4;
- WSAEBADF = WSABASEERR + 9;
- WSAEACCES = WSABASEERR + 13;
- WSAEFAULT = WSABASEERR + 14;
- WSAEINVAL = WSABASEERR + 22;
- WSAEMFILE = WSABASEERR + 24;
- {
- Windows Sockets definitions of regular Berkeley error constants
- }
- WSAEWOULDBLOCK = WSABASEERR + 35;
- WSAEINPROGRESS = WSABASEERR + 36;
- WSAEALREADY = WSABASEERR + 37;
- WSAENOTSOCK = WSABASEERR + 38;
- WSAEDESTADDRREQ = WSABASEERR + 39;
- WSAEMSGSIZE = WSABASEERR + 40;
- WSAEPROTOTYPE = WSABASEERR + 41;
- WSAENOPROTOOPT = WSABASEERR + 42;
- WSAEPROTONOSUPPORT = WSABASEERR + 43;
- WSAESOCKTNOSUPPORT = WSABASEERR + 44;
- WSAEOPNOTSUPP = WSABASEERR + 45;
- WSAEPFNOSUPPORT = WSABASEERR + 46;
- WSAEAFNOSUPPORT = WSABASEERR + 47;
- WSAEADDRINUSE = WSABASEERR + 48;
- WSAEADDRNOTAVAIL = WSABASEERR + 49;
- WSAENETDOWN = WSABASEERR + 50;
- WSAENETUNREACH = WSABASEERR + 51;
- WSAENETRESET = WSABASEERR + 52;
- WSAECONNABORTED = WSABASEERR + 53;
- WSAECONNRESET = WSABASEERR + 54;
- WSAENOBUFS = WSABASEERR + 55;
- WSAEISCONN = WSABASEERR + 56;
- WSAENOTCONN = WSABASEERR + 57;
- WSAESHUTDOWN = WSABASEERR + 58;
- WSAETOOMANYREFS = WSABASEERR + 59;
- WSAETIMEDOUT = WSABASEERR + 60;
- WSAECONNREFUSED = WSABASEERR + 61;
- WSAELOOP = WSABASEERR + 62;
- WSAENAMETOOLONG = WSABASEERR + 63;
- WSAEHOSTDOWN = WSABASEERR + 64;
- WSAEHOSTUNREACH = WSABASEERR + 65;
- WSAENOTEMPTY = WSABASEERR + 66;
- WSAEPROCLIM = WSABASEERR + 67;
- WSAEUSERS = WSABASEERR + 68;
- WSAEDQUOT = WSABASEERR + 69;
- WSAESTALE = WSABASEERR + 70;
- WSAEREMOTE = WSABASEERR + 71;
- WSAEDISCON = WSABASEERR + 101;
- {
- Extended Windows Sockets error constant definitions
- }
- WSASYSNOTREADY = WSABASEERR + 91;
- WSAVERNOTSUPPORTED = WSABASEERR + 92;
- WSANOTINITIALISED = WSABASEERR + 93;
- {
- Error return codes from gethostbyname() and gethostbyaddr()
- (when using the resolver). Note that these errors are
- retrieved via WSAGetLastError() and must therefore follow
- the rules for avoiding clashes with error numbers from
- specific implementations or language run-time systems.
- For this reason the codes are based at WSABASEERR+1001.
- Note also that [WSA]NO_ADDRESS is defined only for
- compatibility purposes.
- }
- WSAHOST_NOT_FOUND = WSABASEERR + 1001;
- HOST_NOT_FOUND = WSAHOST_NOT_FOUND;
- { Non-Authoritative: Host not found, or SERVERFAIL }
- WSATRY_AGAIN = WSABASEERR + 1002;
- TRY_AGAIN = WSATRY_AGAIN;
- { Non recoverable errors, FORMERR, REFUSED, NOTIMP }
- WSANO_RECOVERY = WSABASEERR + 1003;
- NO_RECOVERY = WSANO_RECOVERY;
- { Valid name, no data record of requested type }
- WSANO_DATA = WSABASEERR + 1004;
- NO_DATA = WSANO_DATA;
- { no address, look for MX record }
- WSANO_ADDRESS = WSANO_DATA;
- NO_ADDRESS = WSANO_ADDRESS;
- const
- {
- Windows Sockets errors redefined as regular Berkeley error constants.
- }
- 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;
- TF_DISCONNECT = $01;
- TF_REUSE_SOCKET = $02;
- TF_WRITE_BEHIND = $04;
- {
- Options for use with [gs]etsockopt at the IP level.
- }
- IP_TTL = 7;
- IP_TOS = 8;
- IP_DONTFRAGMENT = 9;
- type
- _TRANSMIT_FILE_BUFFERS = record
- Head : Pointer;
- HeadLength : dword;
- Tail : Pointer;
- TailLength : dword;
- end;
- TRANSMIT_FILE_BUFFERS = _TRANSMIT_FILE_BUFFERS;
- TTransmitFileBuffers = _TRANSMIT_FILE_BUFFERS;
- PTransmitFileBuffers = ^TTransmitFileBuffers;
- { Socket function prototypes }
- const
- winsockdll = 'wsock32.dll';
- function accept(s:TSocket; addr: PSockAddr; addrlen : ptOS_INT) : TSocket;stdcall;external winsockdll name 'accept';
- function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;stdcall;external winsockdll name 'accept';
- function bind(s:TSocket; addr: PSockaddr;namelen:tOS_INT):tOS_INT;stdcall;external winsockdll name 'bind';
- function bind(s:TSocket; const addr: TSockaddr;namelen:tOS_INT):tOS_INT;stdcall;external winsockdll name 'bind';
- function closesocket(s:TSocket):tOS_INT;stdcall;external winsockdll name 'closesocket';
- function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;stdcall;external winsockdll name 'connect';
- function connect(s:TSocket; Const name:TSockAddr; namelen:tOS_INT):tOS_INT;stdcall;external winsockdll name 'connect';
- function ioctlsocket(s:TSocket; cmd:longint; var arg:u_long):tOS_INT;stdcall;external winsockdll name 'ioctlsocket'; { really a c-long }
- function ioctlsocket(s:TSocket; cmd:longint; var arg:longint):tOS_INT;stdcall;external winsockdll name 'ioctlsocket'; { really a c-long }
- function ioctlsocket(s:TSocket; cmd:longint; argp:pu_long):tOS_INT;stdcall;external winsockdll name 'ioctlsocket'; { really a c-long }
- function getpeername(s:TSocket; var name:TSockAddr;var namelen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'getpeername';
- function getsockname(s:TSocket; var name:TSockAddr;var namelen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'getsockname';
- function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar;var optlen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'getsockopt';
- function getsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT;var optval;var optlen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'getsockopt';
- function htonl(hostlong:u_long):u_long;stdcall;external winsockdll name 'htonl';
- function htons(hostshort:u_short):u_short;external winsockdll name 'htons';
- function inet_addr(cp:pchar):cardinal;stdcall;external winsockdll name 'inet_addr';
- function inet_ntoa(i : TInAddr):pchar;stdcall;external winsockdll name 'inet_ntoa';
- function listen(s:TSocket; backlog:tOS_INT):tOS_INT;stdcall;external winsockdll name 'listen';
- function ntohl(netlong:u_long):u_long;stdcall;external winsockdll name 'ntohl';
- function ntohs(netshort:u_short):u_short;stdcall;external winsockdll name 'ntohs';
- function recv(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT):tOS_INT;stdcall;external winsockdll name 'recv';
- function recv(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT):tOS_INT;stdcall;external winsockdll name 'recv';
- function recvfrom(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT;from:PSockAddr; fromlen:ptOS_INT):tOS_INT;stdcall;
- external winsockdll name 'recvfrom';
- function recvfrom(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT;Const from:TSockAddr; var fromlen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'recvfrom';
- function select(nfds:tOS_INT; readfds,writefds,exceptfds : PFDSet;timeout: PTimeVal):tOS_INT;stdcall;
- external winsockdll name 'select';
- function send(s:TSocket;Const buf; len:tOS_INT; flags:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'send';
- function sendto(s:TSocket; buf:pchar; len:tOS_INT; flags:tOS_INT;toaddr:PSockAddr; tolen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'sendto';
- function sendto(s:TSocket; Const buf; len:tOS_INT; flags:tOS_INT;Const toaddr:TSockAddr; tolen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'sendto';
- function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar; optlen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'setsockopt';
- function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; Const optval; optlen:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'setsockopt';
- function shutdown(s:TSocket; how:tOS_INT):tOS_INT;stdcall;
- external winsockdll name 'shutdown';
- function socket(af:tOS_INT; t:tOS_INT; protocol:tOS_INT):TSocket;stdcall;
- external winsockdll name 'socket';
- { Database function prototypes }
- function gethostbyaddr(addr:pchar; len:tOS_INT; t:tOS_INT): PHostEnt;stdcall;external winsockdll name 'gethostbyaddr';
- function gethostbyname(name:pchar):PHostEnt;stdcall;external winsockdll name 'gethostbyname';
- function gethostname(name:pchar; namelen:tOS_INT):tOS_INT;stdcall;external winsockdll name 'gethostname';
- function getservbyport(port:tOS_INT; proto:pchar):PServEnt;stdcall;external winsockdll name 'getservbyport';
- function getservbyname(name:pchar; proto:pchar):PServEnt;stdcall;external winsockdll name 'getservbyname';
- function getprotobynumber(proto:tOS_INT):PProtoEnt;stdcall;external winsockdll name 'getprotobynumber';
- function getprotobyname(name:pchar):PProtoEnt;stdcall;external winsockdll name 'getprotobyname';
- { Microsoft Windows Extension function prototypes }
- function WSAStartup(wVersionRequired:word;var WSAData:TWSADATA):tOS_INT;stdcall;
- external winsockdll name 'WSAStartup';
- function WSACleanup:tOS_INT;stdcall;external winsockdll name 'WSACleanup';
- procedure WSASetLastError(iError:tOS_INT);stdcall;external winsockdll name 'WSASetLastError';
- function WSAGetLastError:tOS_INT;stdcall;external winsockdll name 'WSAGetLastError';
- function WSAIsBlocking:BOOL;stdcall;external winsockdll name 'WSAIsBlocking';
- function WSAUnhookBlockingHook:tOS_INT;stdcall;external winsockdll name 'WSAUnhookBlockingHook';
- function WSASetBlockingHook(lpBlockFunc:TFarProc):TFarProc;stdcall;external winsockdll name 'WSASetBlockingHook';
- function WSACancelBlockingCall:tOS_INT;stdcall;external winsockdll name 'WSACancelBlockingCall';
- function WSAAsyncGetServByName(hWnd:HWND; wMsg:u_int; name:pchar; proto:pchar; buf:pchar;
- buflen:tOS_INT):THandle;stdcall;external winsockdll name 'WSAAsyncGetServByName';
- function WSAAsyncGetServByPort(hWnd:HWND; wMsg:u_int; port:tOS_INT; proto:pchar; buf:pchar;
- buflen:tOS_INT):THandle;stdcall;external winsockdll name 'WSAAsyncGetServByPort';
- function WSAAsyncGetProtoByName(hWnd:HWND; wMsg:u_int; name:pchar; buf:pchar; buflen:tOS_INT):THandle;stdcall;
- external winsockdll name 'WSAAsyncGetProtoByName';
- function WSAAsyncGetProtoByNumber(hWnd:HWND; wMsg:u_int; number:tOS_INT; buf:pchar; buflen:tOS_INT):THandle;stdcall;
- external winsockdll name 'WSAAsyncGetProtoByNumber';
- function WSAAsyncGetHostByName(hWnd:HWND; wMsg:u_int; name:pchar; buf:pchar; buflen:tOS_INT):THandle;stdcall;
- external winsockdll name 'WSAAsyncGetHostByName';
- function WSAAsyncGetHostByAddr(hWnd:HWND; wMsg:u_int; addr:pchar; len:tOS_INT; t:tOS_INT;
- buf:pchar; buflen:tOS_INT):THandle;stdcall;
- external winsockdll name 'WSAAsyncGetHostByAddr';
- function WSACancelAsyncRequest(hAsyncTaskHandle:THandle):tOS_INT;stdcall;
- external winsockdll name 'WSACancelAsyncRequest';
- function WSAAsyncSelect(s:TSocket; hWnd:HWND; wMsg:u_int; lEvent:longint):tOS_INT;stdcall; { really a c-long }
- external winsockdll name 'WSAAsyncSelect';
- function WSARecvEx(s:TSocket;var buf; len:tOS_INT; flags:ptOS_INT):tOS_INT;stdcall;
- external winsockdll name 'WSARecvEx';
- function __WSAFDIsSet(s:TSocket; var FDSet:TFDSet):Bool;stdcall;
- external winsockdll name '__WSAFDIsSet';
- function __WSAFDIsSet_(s:TSocket; var FDSet:TFDSet):tOS_INT;stdcall;
- external winsockdll name '__WSAFDIsSet';
- function TransmitFile(hSocket:TSocket; hFile:THandle; nNumberOfBytesToWrite:dword;
- nNumberOfBytesPerSend:DWORD; lpOverlapped:POverlapped;
- lpTransmitBuffers:PTransmitFileBuffers; dwReserved:dword):Bool;stdcall;
- external winsockdll name 'TransmitFile';
- function AcceptEx(sListenSocket,sAcceptSocket:TSocket;
- lpOutputBuffer:Pointer; dwReceiveDataLength,dwLocalAddressLength,
- dwRemoteAddressLength:dword; var lpdwBytesReceived:dword;
- lpOverlapped:POverlapped):Bool;stdcall;
- external winsockdll name 'AcceptEx';
- procedure GetAcceptExSockaddrs(lpOutputBuffer:Pointer;
- dwReceiveDataLength,dwLocalAddressLength,dwRemoteAddressLength:dword;
- var LocalSockaddr:TSockAddr; var LocalSockaddrLength:tOS_INT;
- var RemoteSockaddr:TSockAddr; var RemoteSockaddrLength:tOS_INT);stdcall;
- external winsockdll name 'GetAcceptExSockaddrs';
- function WSAMakeSyncReply(Buflen,Error:Word):dword;
- function WSAMakeSelectReply(Event,Error:Word):dword;
- function WSAGetAsyncBuflen(Param:dword):Word;
- function WSAGetAsyncError(Param:dword):Word;
- function WSAGetSelectEvent(Param:dword):Word;
- function WSAGetSelectError(Param:dword):Word;
- procedure FD_CLR(Socket:TSocket; var FDSet:TFDSet);
- function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
- procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
- procedure FD_ZERO(var FDSet:TFDSet);
- implementation
- {
- Implementation of the helper routines
- }
- function WSAMakeSyncReply(Buflen,Error:Word):dword;
- begin
- WSAMakeSyncReply:=MakeLong(Buflen, Error);
- end;
- function WSAMakeSelectReply(Event,Error:Word):dword;
- begin
- WSAMakeSelectReply:=MakeLong(Event,Error);
- end;
- function WSAGetAsyncBuflen(Param:dword):Word;
- begin
- WSAGetAsyncBuflen:=lo(Param);
- end;
- function WSAGetAsyncError(Param:dword):Word;
- begin
- WSAGetAsyncError:=hi(Param);
- end;
- function WSAGetSelectEvent(Param:dword):Word;
- begin
- WSAGetSelectEvent:=lo(Param);
- end;
- function WSAGetSelectError(Param:dword):Word;
- begin
- WSAGetSelectError:=hi(Param);
- end;
- procedure FD_CLR(Socket:TSocket; var FDSet:TFDSet);
- var
- i : u_int;
- begin
- i:=0;
- while i<FDSet.fd_count do
- begin
- if FDSet.fd_array[i]=Socket then
- begin
- while i<FDSet.fd_count-1 do
- begin
- FDSet.fd_array[i]:=FDSet.fd_array[i+1];
- inc(i);
- end;
- dec(FDSet.fd_count);
- break;
- end;
- inc(i);
- end;
- end;
- function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
- begin
- FD_ISSET:=__WSAFDIsSet(Socket,FDSet);
- end;
- procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
- begin
- if FDSet.fd_count<FD_SETSIZE then
- begin
- FDSet.fd_array[FDSet.fd_count]:=Socket;
- Inc(FDSet.fd_count);
- end;
- end;
- procedure FD_ZERO(var FDSet:TFDSet);
- begin
- FDSet.fd_count:=0;
- end;
- end.
- {
- $Log$
- Revision 1.12 2003-01-01 14:34:22 peter
- * sendto overload
- Revision 1.11 2002/12/25 01:04:03 peter
- * sendto overload added
- Revision 1.10 2002/09/07 21:28:10 carl
- - removed os_types
- * fix range check errors
- Revision 1.9 2002/09/07 16:01:29 peter
- * old logs removed and tabs fixed
- Revision 1.8 2002/08/12 14:18:53 florian
- * ioctlselect overloaded to take a longint is second parameter
- Revision 1.7 2002/01/19 11:58:20 peter
- * more functions from webbugs
- }
|