~ubuntu-branches/debian/lenny/fpc/lenny

« back to all changes in this revision

Viewing changes to fpcsrc/rtl/wince/winsock2.pp

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-05-17 17:12:11 UTC
  • mfrom: (3.1.9 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080517171211-9qi33xhd9evfa0kg
Tags: 2.2.0-dfsg1-9
[ Torsten Werner ]
* Add Mazen Neifer to Uploaders field.

[ Mazen Neifer ]
* Moved FPC sources into a version dependent directory from /usr/share/fpcsrc
  to /usr/share/fpcsrc/${FPCVERSION}. This allow installing more than on FPC
  release.
* Fixed far call issue in compiler preventing building huge binearies.
  (closes: #477743)
* Updated building dependencies, recomennded and suggested packages.
* Moved fppkg to fp-utils as it is just a helper tool and is not required by
  compiler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
{       Winsock2.h -- definitions to be used with the WinSock 2 DLL and WinSock 2 applications.
 
2
        This header file corresponds to version 2.2.x of the WinSock API specification.
 
3
        This file includes parts which are Copyright (c) 1982-1986 Regents
 
4
        of the University of California. All rights reserved.
 
5
        The Berkeley Software License Agreement specifies the terms and
 
6
        conditions for redistribution. }
 
7
 
 
8
// converted by Alex Konshin, mailto:alexk@msmt.spb.su
 
9
// added FreePascal stuff: AlexS@freepage.de
 
10
// updated for wince : orinaudo@gmail.com
 
11
// based on svn3257 rtl/win/winsock2.pas
 
12
 
 
13
unit WinSock2;
 
14
 
 
15
{$ifndef NO_SMART_LINK}
 
16
{$smartlink on}
 
17
{$endif}
 
18
{ convention is cdecl for WinCE API}
 
19
{$calling cdecl}
 
20
 
 
21
interface
 
22
 
 
23
Uses Windows;
 
24
 
 
25
{       Define the current Winsock version. To build an earlier Winsock version
 
26
        application redefine this value prior to including Winsock2.h. }
 
27
Const
 
28
        WINSOCK_VERSION = $0202;
 
29
{$IFNDEF WINCE}
 
30
        WINSOCK2_DLL = 'ws2_32.dll';
 
31
{$ELSE WINCE}
 
32
        WINSOCK2_DLL = 'ws2.dll';
 
33
{$ENDIF WINCE}
 
34
 
 
35
Type
 
36
  u_char = Char;
 
37
  u_short = Word;
 
38
  u_int = DWord;
 
39
  u_long = DWord;
 
40
  pu_char = ^u_char;
 
41
  pu_short = ^u_short;
 
42
  pu_int = ^u_int;
 
43
  pu_long = ^u_long;
 
44
 
 
45
  TSocket = u_int;      { The new type to be used in all instances which refer to sockets. }
 
46
 
 
47
        WSAEVENT = THandle;
 
48
        PWSAEVENT = ^WSAEVENT;
 
49
        LPWSAEVENT = PWSAEVENT;
 
50
{$IFDEF UNICODE}
 
51
        PMBChar = PWideChar;
 
52
{$ELSE}
 
53
        PMBChar = PChar;
 
54
{$ENDIF}
 
55
 
 
56
const
 
57
  FD_SETSIZE     =   64;
 
58
 
 
59
type
 
60
  PFDSet = ^TFDSet;
 
61
  TFDSet = record
 
62
    fd_count: u_int;
 
63
    fd_array: array[0..FD_SETSIZE-1] of TSocket;
 
64
  end;
 
65
 
 
66
  PTimeVal = ^TTimeVal;
 
67
  TTimeVal = record
 
68
    tv_sec: Longint;
 
69
    tv_usec: Longint;
 
70
  end;
 
71
 
 
72
const
 
73
  IOCPARM_MASK = $7f;
 
74
  IOC_VOID     = $20000000;
 
75
  IOC_OUT      = $40000000;
 
76
  IOC_IN       = $80000000;
 
77
  IOC_INOUT    = (IOC_IN or IOC_OUT);
 
78
 
 
79
  FIONREAD     = IOC_OUT or { get # bytes to read }
 
80
    ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
 
81
    (Longint(Byte('f')) shl 8) or 127;
 
82
  FIONBIO      = IOC_IN or { set/clear non-blocking i/o }
 
83
    ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
 
84
    (Longint(Byte('f')) shl 8) or 126;
 
85
  FIOASYNC     = IOC_IN or { set/clear async i/o }
 
86
    ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
 
87
    (Longint(Byte('f')) shl 8) or 125;
 
88
 
 
89
type
 
90
  PHostEnt = ^THostEnt;
 
91
  THostEnt = record
 
92
    h_name: PChar;
 
93
    h_aliases: ^PChar;
 
94
    h_addrtype: Smallint;
 
95
    h_length: Smallint;
 
96
    case Byte of
 
97
      0: (h_addr_list: ^PChar);
 
98
      1: (h_addr: ^PChar)
 
99
  end;
 
100
 
 
101
  PNetEnt = ^TNetEnt;
 
102
  TNetEnt = record
 
103
    n_name: PChar;
 
104
    n_aliases: ^PChar;
 
105
    n_addrtype: Smallint;
 
106
    n_net: u_long;
 
107
  end;
 
108
 
 
109
  PServEnt = ^TServEnt;
 
110
  TServEnt = record
 
111
    s_name: PChar;
 
112
    s_aliases: ^PChar;
 
113
    s_port: Smallint;
 
114
    s_proto: PChar;
 
115
  end;
 
116
 
 
117
  PProtoEnt = ^TProtoEnt;
 
118
  TProtoEnt = record
 
119
    p_name: PChar;
 
120
    p_aliases: ^Pchar;
 
121
    p_proto: Smallint;
 
122
  end;
 
123
 
 
124
const
 
125
 
 
126
{ Protocols }
 
127
  IPPROTO_IP     =   0;             { dummy for IP }
 
128
  IPPROTO_ICMP   =   1;             { control message protocol }
 
129
  IPPROTO_IGMP   =   2;             { group management protocol }
 
130
  IPPROTO_GGP    =   3;             { gateway^2 (deprecated) }
 
131
  IPPROTO_TCP    =   6;             { tcp }
 
132
  IPPROTO_PUP    =  12;             { pup }
 
133
  IPPROTO_UDP    =  17;             { user datagram protocol }
 
134
  IPPROTO_IDP    =  22;             { xns idp }
 
135
  IPPROTO_ND     =  77;             { UNOFFICIAL net disk proto }
 
136
 
 
137
  IPPROTO_RAW    =  255;            { raw IP packet }
 
138
  IPPROTO_MAX    =  256;
 
139
 
 
140
{ Port/socket numbers: network standard functions}
 
141
 
 
142
  IPPORT_ECHO    =   7;
 
143
  IPPORT_DISCARD =   9;
 
144
  IPPORT_SYSTAT  =   11;
 
145
  IPPORT_DAYTIME =   13;
 
146
  IPPORT_NETSTAT =   15;
 
147
  IPPORT_FTP     =   21;
 
148
  IPPORT_TELNET  =   23;
 
149
  IPPORT_SMTP    =   25;
 
150
  IPPORT_TIMESERVER  =  37;
 
151
  IPPORT_NAMESERVER  =  42;
 
152
  IPPORT_WHOIS       =  43;
 
153
  IPPORT_MTP         =  57;
 
154
 
 
155
{ Port/socket numbers: host specific functions }
 
156
 
 
157
  IPPORT_TFTP        =  69;
 
158
  IPPORT_RJE         =  77;
 
159
  IPPORT_FINGER      =  79;
 
160
  IPPORT_TTYLINK     =  87;
 
161
  IPPORT_SUPDUP      =  95;
 
162
 
 
163
{ UNIX TCP sockets }
 
164
 
 
165
  IPPORT_EXECSERVER  =  512;
 
166
  IPPORT_LOGINSERVER =  513;
 
167
  IPPORT_CMDSERVER   =  514;
 
168
  IPPORT_EFSSERVER   =  520;
 
169
 
 
170
{ UNIX UDP sockets }
 
171
 
 
172
  IPPORT_BIFFUDP     =  512;
 
173
  IPPORT_WHOSERVER   =  513;
 
174
  IPPORT_ROUTESERVER =  520;
 
175
 
 
176
{ Ports < IPPORT_RESERVED are reserved for
 
177
  privileged processes (e.g. root). }
 
178
 
 
179
  IPPORT_RESERVED    =  1024;
 
180
 
 
181
{ Link numbers }
 
182
 
 
183
  IMPLINK_IP         =  155;
 
184
  IMPLINK_LOWEXPER   =  156;
 
185
  IMPLINK_HIGHEXPER  =  158;
 
186
 
 
187
  TF_DISCONNECT           = $01;
 
188
  TF_REUSE_SOCKET         = $02;
 
189
  TF_WRITE_BEHIND         = $04;
 
190
 
 
191
{ Options for use with [gs]etsockopt at the IP level. }
 
192
 
 
193
  IP_OPTIONS          = 1;
 
194
  IP_MULTICAST_IF     = 2;           { set/get IP multicast interface   }
 
195
  IP_MULTICAST_TTL    = 3;           { set/get IP multicast timetolive  }
 
196
  IP_MULTICAST_LOOP   = 4;           { set/get IP multicast loopback    }
 
197
  IP_ADD_MEMBERSHIP   = 5;           { add  an IP group membership      }
 
198
  IP_DROP_MEMBERSHIP  = 6;           { drop an IP group membership      }
 
199
  IP_TTL              = 7;           { set/get IP Time To Live          }
 
200
  IP_TOS              = 8;           { set/get IP Type Of Service       }
 
201
  IP_DONTFRAGMENT     = 9;           { set/get IP Don't Fragment flag   }
 
202
 
 
203
 
 
204
  IP_DEFAULT_MULTICAST_TTL   = 1;    { normally limit m'casts to 1 hop  }
 
205
  IP_DEFAULT_MULTICAST_LOOP  = 1;    { normally hear sends if a member  }
 
206
  IP_MAX_MEMBERSHIPS         = 20;   { per socket; must fit in one mbuf }
 
207
 
 
208
{ This is used instead of -1, since the
 
209
  TSocket type is unsigned.}
 
210
 
 
211
  INVALID_SOCKET                = TSocket(NOT(0));
 
212
  SOCKET_ERROR                  = -1;
 
213
 
 
214
{ Types }
 
215
 
 
216
  SOCK_STREAM     = 1;               { stream socket }
 
217
  SOCK_DGRAM      = 2;               { datagram socket }
 
218
  SOCK_RAW        = 3;               { raw-protocol interface }
 
219
  SOCK_RDM        = 4;               { reliably-delivered message }
 
220
  SOCK_SEQPACKET  = 5;               { sequenced packet stream }
 
221
 
 
222
{ Option flags per-socket. }
 
223
 
 
224
  SO_DEBUG        = $0001;          { turn on debugging info recording }
 
225
  SO_ACCEPTCONN   = $0002;          { socket has had listen() }
 
226
  SO_REUSEADDR    = $0004;          { allow local address reuse }
 
227
  SO_KEEPALIVE    = $0008;          { keep connections alive }
 
228
  SO_DONTROUTE    = $0010;          { just use interface addresses }
 
229
  SO_BROADCAST    = $0020;          { permit sending of broadcast msgs }
 
230
  SO_USELOOPBACK  = $0040;          { bypass hardware when possible }
 
231
  SO_LINGER       = $0080;          { linger on close if data present }
 
232
  SO_OOBINLINE    = $0100;          { leave received OOB data in line }
 
233
 
 
234
  SO_DONTLINGER  =   $ff7f;
 
235
 
 
236
{ Additional options. }
 
237
 
 
238
  SO_SNDBUF       = $1001;          { send buffer size }
 
239
  SO_RCVBUF       = $1002;          { receive buffer size }
 
240
  SO_SNDLOWAT     = $1003;          { send low-water mark }
 
241
  SO_RCVLOWAT     = $1004;          { receive low-water mark }
 
242
  SO_SNDTIMEO     = $1005;          { send timeout }
 
243
  SO_RCVTIMEO     = $1006;          { receive timeout }
 
244
  SO_ERROR        = $1007;          { get error status and clear }
 
245
  SO_TYPE         = $1008;          { get socket type }
 
246
 
 
247
{ Options for connect and disconnect data and options.  Used only by
 
248
  non-TCP/IP transports such as DECNet, OSI TP4, etc. }
 
249
 
 
250
  SO_CONNDATA     = $7000;
 
251
  SO_CONNOPT      = $7001;
 
252
  SO_DISCDATA     = $7002;
 
253
  SO_DISCOPT      = $7003;
 
254
  SO_CONNDATALEN  = $7004;
 
255
  SO_CONNOPTLEN   = $7005;
 
256
  SO_DISCDATALEN  = $7006;
 
257
  SO_DISCOPTLEN   = $7007;
 
258
 
 
259
{ Option for opening sockets for synchronous access. }
 
260
  SO_OPENTYPE     = $7008;
 
261
  SO_SYNCHRONOUS_ALERT    = $10;
 
262
  SO_SYNCHRONOUS_NONALERT = $20;
 
263
 
 
264
{ Other NT-specific options. }
 
265
  SO_MAXDG        = $7009;
 
266
  SO_MAXPATHDG    = $700A;
 
267
  SO_UPDATE_ACCEPT_CONTEXT     = $700B;
 
268
  SO_CONNECT_TIME = $700C;
 
269
 
 
270
{ TCP options. }
 
271
  TCP_NODELAY     = $0001;
 
272
  TCP_BSDURGENT   = $7000;
 
273
 
 
274
{ WinSock 2 extension -- new options }
 
275
        SO_GROUP_ID = $2001; // ID of a socket group
 
276
        SO_GROUP_PRIORITY = $2002; // the relative priority within a group
 
277
        SO_MAX_MSG_SIZE = $2003; // maximum message size
 
278
        SO_Protocol_InfoA = $2004; // WSAPROTOCOL_INFOA structure
 
279
        SO_Protocol_InfoW = $2005; // WSAPROTOCOL_INFOW structure
 
280
{$IFDEF UNICODE}
 
281
        SO_Protocol_Info = SO_Protocol_InfoW;
 
282
{$ELSE}
 
283
        SO_Protocol_Info = SO_Protocol_InfoA;
 
284
{$ENDIF}
 
285
        PVD_CONFIG = $3001; // configuration info for service provider
 
286
 
 
287
{ Address families. }
 
288
  AF_UNSPEC       = 0;               { unspecified }
 
289
  AF_UNIX         = 1;               { local to host (pipes, portals) }
 
290
  AF_INET         = 2;               { internetwork: UDP, TCP, etc. }
 
291
  AF_IMPLINK      = 3;               { arpanet imp addresses }
 
292
  AF_PUP          = 4;               { pup protocols: e.g. BSP }
 
293
  AF_CHAOS        = 5;               { mit CHAOS protocols }
 
294
  AF_IPX          = 6;               { IPX and SPX }
 
295
  AF_NS           = 6;               { XEROX NS protocols }
 
296
  AF_ISO          = 7;               { ISO protocols }
 
297
  AF_OSI          = AF_ISO;          { OSI is ISO }
 
298
  AF_ECMA         = 8;               { european computer manufacturers }
 
299
  AF_DATAKIT      = 9;               { datakit protocols }
 
300
  AF_CCITT        = 10;              { CCITT protocols, X.25 etc }
 
301
  AF_SNA          = 11;              { IBM SNA }
 
302
  AF_DECnet       = 12;              { DECnet }
 
303
  AF_DLI          = 13;              { Direct data link interface }
 
304
  AF_LAT          = 14;              { LAT }
 
305
  AF_HYLINK       = 15;              { NSC Hyperchannel }
 
306
  AF_APPLETALK    = 16;              { AppleTalk }
 
307
  AF_NETBIOS      = 17;              { NetBios-style addresses }
 
308
  AF_VOICEVIEW    = 18;              { VoiceView }
 
309
  AF_FIREFOX      = 19;              { FireFox }
 
310
  AF_UNKNOWN1     = 20;              { Somebody is using this! }
 
311
  AF_BAN          = 21;              { Banyan }
 
312
        AF_ATM          = 22; // Native ATM Services
 
313
        AF_INET6        = 23; // Internetwork Version 6
 
314
 
 
315
        AF_MAX = 24;
 
316
 
 
317
{       Socket I/O Controls }
 
318
{Const
 
319
        SIOCSHIWAT = _IOW('s', 0, u_long); // set high watermark
 
320
        SIOCGHIWAT = _IOR('s', 1, u_long); // get high watermark
 
321
        SIOCSLOWAT = _IOW('s', 2, u_long); // set low watermark
 
322
        SIOCGLOWAT = _IOR('s', 3, u_long); // get low watermark
 
323
        SIOCATMARK = _IOR('s', 7, u_long); // at oob mark? }
 
324
 
 
325
{ Protocol families, same as address families for now. }
 
326
 
 
327
  PF_UNSPEC       = AF_UNSPEC;
 
328
  PF_UNIX         = AF_UNIX;
 
329
  PF_INET         = AF_INET;
 
330
  PF_IMPLINK      = AF_IMPLINK;
 
331
  PF_PUP          = AF_PUP;
 
332
  PF_CHAOS        = AF_CHAOS;
 
333
  PF_NS           = AF_NS;
 
334
  PF_IPX          = AF_IPX;
 
335
  PF_ISO          = AF_ISO;
 
336
  PF_OSI          = AF_OSI;
 
337
  PF_ECMA         = AF_ECMA;
 
338
  PF_DATAKIT      = AF_DATAKIT;
 
339
  PF_CCITT        = AF_CCITT;
 
340
  PF_SNA          = AF_SNA;
 
341
  PF_DECnet       = AF_DECnet;
 
342
  PF_DLI          = AF_DLI;
 
343
  PF_LAT          = AF_LAT;
 
344
  PF_HYLINK       = AF_HYLINK;
 
345
  PF_APPLETALK    = AF_APPLETALK;
 
346
  PF_VOICEVIEW    = AF_VOICEVIEW;
 
347
  PF_FIREFOX      = AF_FIREFOX;
 
348
  PF_UNKNOWN1     = AF_UNKNOWN1;
 
349
  PF_BAN          = AF_BAN;
 
350
        PF_ATM          = AF_ATM;
 
351
        PF_INET6        = AF_INET6;
 
352
 
 
353
  PF_MAX          = AF_MAX;
 
354
 
 
355
type
 
356
 
 
357
  SunB = record
 
358
    s_b1, s_b2, s_b3, s_b4: u_char;
 
359
  end;
 
360
 
 
361
  SunW = record
 
362
    s_w1, s_w2: u_short;
 
363
  end;
 
364
 
 
365
  PInAddr = ^TInAddr;
 
366
  TInAddr = record
 
367
    case integer of
 
368
      0: (S_un_b: SunB);
 
369
      1: (S_un_w: SunW);
 
370
      2: (S_addr: u_long);
 
371
  end;
 
372
 
 
373
  PSockAddrIn = ^TSockAddrIn;
 
374
  TSockAddrIn = record
 
375
    case Integer of
 
376
      0: (sin_family: u_short;
 
377
          sin_port: u_short;
 
378
          sin_addr: TInAddr;
 
379
          sin_zero: array[0..7] of Char);
 
380
      1: (sa_family: u_short;
 
381
          sa_data: array[0..13] of Char)
 
382
  end;
 
383
 
 
384
  { Structure used by kernel to store most addresses. }
 
385
 
 
386
  PSockAddr = ^TSockAddr;
 
387
  TSockAddr = TSockAddrIn;
 
388
 
 
389
  { Structure used by kernel to pass protocol information in raw sockets. }
 
390
  PSockProto = ^TSockProto;
 
391
  TSockProto = record
 
392
    sp_family: u_short;
 
393
    sp_protocol: u_short;
 
394
  end;
 
395
 
 
396
{ Structure used for manipulating linger option. }
 
397
  PLinger = ^TLinger;
 
398
  TLinger = record
 
399
    l_onoff: u_short;
 
400
    l_linger: u_short;
 
401
  end;
 
402
 
 
403
const
 
404
  INADDR_ANY       = $00000000;
 
405
  INADDR_LOOPBACK  = $7F000001;
 
406
  INADDR_BROADCAST = $FFFFFFFF;
 
407
  INADDR_NONE      = $FFFFFFFF;
 
408
 
 
409
        MSG_OOB         = $1;             {process out-of-band data }
 
410
  MSG_PEEK        = $2;             {peek at incoming message }
 
411
  MSG_DONTROUTE   = $4;             {send without using routing tables }
 
412
 
 
413
{ WinSock 2 extension -- new flags for WSASend(), WSASendTo(), WSARecv() and WSARecvFrom() }
 
414
        MSG_INTERRUPT = $10; {/* send/recv in the interrupt context */}
 
415
        MSG_MAXIOVLEN = 16;
 
416
 
 
417
  MSG_PARTIAL     = $8000;          {partial send or recv for message xport }
 
418
 
 
419
{ Define constant based on rfc883, used by gethostbyxxxx() calls. }
 
420
 
 
421
  MAXGETHOSTSTRUCT        = 1024;
 
422
 
 
423
{ Maximum queue length specifiable by listen. }
 
424
        SOMAXCONN = $7fffffff;
 
425
 
 
426
{ WinSock 2 extension -- bit values and indices for FD_XXX network events }
 
427
        FD_READ_BIT = 0;
 
428
        FD_READ = (1  shl  FD_READ_BIT);
 
429
        FD_WRITE_BIT = 1;
 
430
        FD_WRITE = (1  shl  FD_WRITE_BIT);
 
431
        FD_OOB_BIT = 2;
 
432
        FD_OOB = (1  shl  FD_OOB_BIT);
 
433
        FD_ACCEPT_BIT = 3;
 
434
        FD_ACCEPT = (1  shl  FD_ACCEPT_BIT);
 
435
        FD_CONNECT_BIT = 4;
 
436
        FD_CONNECT = (1  shl  FD_CONNECT_BIT);
 
437
        FD_CLOSE_BIT = 5;
 
438
        FD_CLOSE = (1  shl  FD_CLOSE_BIT);
 
439
        FD_QOS_BIT = 6;
 
440
        FD_QOS = (1  shl  FD_QOS_BIT);
 
441
        FD_GROUP_QOS_BIT = 7;
 
442
        FD_GROUP_QOS = (1  shl  FD_GROUP_QOS_BIT);
 
443
        FD_MAX_EVENTS = 8;
 
444
        FD_ALL_EVENTS = ((1  shl  FD_MAX_EVENTS) - 1);
 
445
 
 
446
{ All Windows Sockets error constants are biased by WSABASEERR from the "normal" }
 
447
 
 
448
  WSABASEERR              = 10000;
 
449
 
 
450
{ Windows Sockets definitions of regular Microsoft C error constants }
 
451
 
 
452
  WSAEINTR                = (WSABASEERR+4);
 
453
  WSAEBADF                = (WSABASEERR+9);
 
454
  WSAEACCES               = (WSABASEERR+13);
 
455
  WSAEFAULT               = (WSABASEERR+14);
 
456
  WSAEINVAL               = (WSABASEERR+22);
 
457
  WSAEMFILE               = (WSABASEERR+24);
 
458
 
 
459
{ Windows Sockets definitions of regular Berkeley error constants }
 
460
 
 
461
  WSAEWOULDBLOCK          = (WSABASEERR+35);
 
462
  WSAEINPROGRESS          = (WSABASEERR+36);
 
463
  WSAEALREADY             = (WSABASEERR+37);
 
464
  WSAENOTSOCK             = (WSABASEERR+38);
 
465
  WSAEDESTADDRREQ         = (WSABASEERR+39);
 
466
  WSAEMSGSIZE             = (WSABASEERR+40);
 
467
  WSAEPROTOTYPE           = (WSABASEERR+41);
 
468
  WSAENOPROTOOPT          = (WSABASEERR+42);
 
469
  WSAEPROTONOSUPPORT      = (WSABASEERR+43);
 
470
  WSAESOCKTNOSUPPORT      = (WSABASEERR+44);
 
471
  WSAEOPNOTSUPP           = (WSABASEERR+45);
 
472
  WSAEPFNOSUPPORT         = (WSABASEERR+46);
 
473
  WSAEAFNOSUPPORT         = (WSABASEERR+47);
 
474
  WSAEADDRINUSE           = (WSABASEERR+48);
 
475
  WSAEADDRNOTAVAIL        = (WSABASEERR+49);
 
476
  WSAENETDOWN             = (WSABASEERR+50);
 
477
  WSAENETUNREACH          = (WSABASEERR+51);
 
478
  WSAENETRESET            = (WSABASEERR+52);
 
479
  WSAECONNABORTED         = (WSABASEERR+53);
 
480
  WSAECONNRESET           = (WSABASEERR+54);
 
481
  WSAENOBUFS              = (WSABASEERR+55);
 
482
  WSAEISCONN              = (WSABASEERR+56);
 
483
  WSAENOTCONN             = (WSABASEERR+57);
 
484
  WSAESHUTDOWN            = (WSABASEERR+58);
 
485
  WSAETOOMANYREFS         = (WSABASEERR+59);
 
486
  WSAETIMEDOUT            = (WSABASEERR+60);
 
487
  WSAECONNREFUSED         = (WSABASEERR+61);
 
488
  WSAELOOP                = (WSABASEERR+62);
 
489
  WSAENAMETOOLONG         = (WSABASEERR+63);
 
490
  WSAEHOSTDOWN            = (WSABASEERR+64);
 
491
  WSAEHOSTUNREACH         = (WSABASEERR+65);
 
492
  WSAENOTEMPTY            = (WSABASEERR+66);
 
493
  WSAEPROCLIM             = (WSABASEERR+67);
 
494
  WSAEUSERS               = (WSABASEERR+68);
 
495
  WSAEDQUOT               = (WSABASEERR+69);
 
496
  WSAESTALE               = (WSABASEERR+70);
 
497
  WSAEREMOTE              = (WSABASEERR+71);
 
498
 
 
499
{ Extended Windows Sockets error constant definitions }
 
500
 
 
501
  WSASYSNOTREADY          = (WSABASEERR+91);
 
502
  WSAVERNOTSUPPORTED      = (WSABASEERR+92);
 
503
  WSANOTINITIALISED       = (WSABASEERR+93);
 
504
        WSAEDISCON = (WSABASEERR+101);
 
505
        WSAENOMORE = (WSABASEERR+102);
 
506
        WSAECANCELLED = (WSABASEERR+103);
 
507
        WSAEINVALIDPROCTABLE = (WSABASEERR+104);
 
508
        WSAEINVALIDPROVIDER = (WSABASEERR+105);
 
509
        WSAEPROVIDERFAILEDINIT = (WSABASEERR+106);
 
510
        WSASYSCALLFAILURE = (WSABASEERR+107);
 
511
        WSASERVICE_NOT_FOUND = (WSABASEERR+108);
 
512
        WSATYPE_NOT_FOUND = (WSABASEERR+109);
 
513
        WSA_E_NO_MORE = (WSABASEERR+110);
 
514
        WSA_E_CANCELLED = (WSABASEERR+111);
 
515
        WSAEREFUSED = (WSABASEERR+112);
 
516
 
 
517
 
 
518
{ Error return codes from gethostbyname() and gethostbyaddr()
 
519
  (when using the resolver). Note that these errors are
 
520
  retrieved via WSAGetLastError() and must therefore follow
 
521
  the rules for avoiding clashes with error numbers from
 
522
  specific implementations or language run-time systems.
 
523
  For this reason the codes are based at WSABASEERR+1001.
 
524
  Note also that [WSA]NO_ADDRESS is defined only for
 
525
  compatibility purposes. }
 
526
 
 
527
{ Authoritative Answer: Host not found }
 
528
  WSAHOST_NOT_FOUND       = (WSABASEERR+1001);
 
529
  HOST_NOT_FOUND          = WSAHOST_NOT_FOUND;
 
530
 
 
531
{ Non-Authoritative: Host not found, or SERVERFAIL }
 
532
  WSATRY_AGAIN            = (WSABASEERR+1002);
 
533
  TRY_AGAIN               = WSATRY_AGAIN;
 
534
 
 
535
{ Non recoverable errors, FORMERR, REFUSED, NOTIMP }
 
536
  WSANO_RECOVERY          = (WSABASEERR+1003);
 
537
  NO_RECOVERY             = WSANO_RECOVERY;
 
538
 
 
539
{ Valid name, no data record of requested type }
 
540
  WSANO_DATA              = (WSABASEERR+1004);
 
541
  NO_DATA                 = WSANO_DATA;
 
542
 
 
543
{ no address, look for MX record }
 
544
  WSANO_ADDRESS           = WSANO_DATA;
 
545
  NO_ADDRESS              = WSANO_ADDRESS;
 
546
 
 
547
{ WinSock 2 extension -- new error codes and type definition }
 
548
        WSA_IO_PENDING = ERROR_IO_PENDING;
 
549
        WSA_IO_INCOMPLETE = ERROR_IO_INCOMPLETE;
 
550
        WSA_INVALID_HANDLE = ERROR_INVALID_HANDLE;
 
551
        WSA_INVALID_PARAMETER = ERROR_INVALID_PARAMETER;
 
552
        WSA_NOT_ENOUGH_MEMORY = ERROR_NOT_ENOUGH_MEMORY;
 
553
        WSA_OPERATION_ABORTED = ERROR_OPERATION_ABORTED;
 
554
{$ifndef FPC}{TODO}
 
555
        WSA_INVALID_EVENT = WSAEVENT(nil);
 
556
{$endif}
 
557
        WSA_MAXIMUM_WAIT_EVENTS = MAXIMUM_WAIT_OBJECTS;
 
558
        WSA_WAIT_FAILED = $ffffffff;
 
559
        WSA_WAIT_EVENT_0 = WAIT_OBJECT_0;
 
560
        WSA_WAIT_IO_COMPLETION = WAIT_IO_COMPLETION;
 
561
        WSA_WAIT_TIMEOUT = WAIT_TIMEOUT;
 
562
        WSA_INFINITE = INFINITE;
 
563
 
 
564
{ Windows Sockets errors redefined as regular Berkeley error constants.
 
565
  These are commented out in Windows NT to avoid conflicts with errno.h.
 
566
  Use the WSA constants instead. }
 
567
 
 
568
  EWOULDBLOCK        =  WSAEWOULDBLOCK;
 
569
  EINPROGRESS        =  WSAEINPROGRESS;
 
570
  EALREADY           =  WSAEALREADY;
 
571
  ENOTSOCK           =  WSAENOTSOCK;
 
572
  EDESTADDRREQ       =  WSAEDESTADDRREQ;
 
573
  EMSGSIZE           =  WSAEMSGSIZE;
 
574
  EPROTOTYPE         =  WSAEPROTOTYPE;
 
575
  ENOPROTOOPT        =  WSAENOPROTOOPT;
 
576
  EPROTONOSUPPORT    =  WSAEPROTONOSUPPORT;
 
577
  ESOCKTNOSUPPORT    =  WSAESOCKTNOSUPPORT;
 
578
  EOPNOTSUPP         =  WSAEOPNOTSUPP;
 
579
  EPFNOSUPPORT       =  WSAEPFNOSUPPORT;
 
580
  EAFNOSUPPORT       =  WSAEAFNOSUPPORT;
 
581
  EADDRINUSE         =  WSAEADDRINUSE;
 
582
  EADDRNOTAVAIL      =  WSAEADDRNOTAVAIL;
 
583
  ENETDOWN           =  WSAENETDOWN;
 
584
  ENETUNREACH        =  WSAENETUNREACH;
 
585
  ENETRESET          =  WSAENETRESET;
 
586
  ECONNABORTED       =  WSAECONNABORTED;
 
587
  ECONNRESET         =  WSAECONNRESET;
 
588
  ENOBUFS            =  WSAENOBUFS;
 
589
  EISCONN            =  WSAEISCONN;
 
590
  ENOTCONN           =  WSAENOTCONN;
 
591
  ESHUTDOWN          =  WSAESHUTDOWN;
 
592
  ETOOMANYREFS       =  WSAETOOMANYREFS;
 
593
  ETIMEDOUT          =  WSAETIMEDOUT;
 
594
  ECONNREFUSED       =  WSAECONNREFUSED;
 
595
  ELOOP              =  WSAELOOP;
 
596
  ENAMETOOLONG       =  WSAENAMETOOLONG;
 
597
  EHOSTDOWN          =  WSAEHOSTDOWN;
 
598
  EHOSTUNREACH       =  WSAEHOSTUNREACH;
 
599
  ENOTEMPTY          =  WSAENOTEMPTY;
 
600
  EPROCLIM           =  WSAEPROCLIM;
 
601
  EUSERS             =  WSAEUSERS;
 
602
  EDQUOT             =  WSAEDQUOT;
 
603
  ESTALE             =  WSAESTALE;
 
604
  EREMOTE            =  WSAEREMOTE;
 
605
 
 
606
 
 
607
  WSADESCRIPTION_LEN     =   256;
 
608
  WSASYS_STATUS_LEN      =   128;
 
609
        MAX_PROTOCOL_CHAIN = 7;
 
610
        BASE_PROTOCOL = 1;
 
611
        LAYERED_PROTOCOL = 0;
 
612
        WSAPROTOCOL_LEN = 255;
 
613
 
 
614
type
 
615
  PWSAData = ^TWSAData;
 
616
  TWSAData = record
 
617
    wVersion: Word;
 
618
    wHighVersion: Word;
 
619
    szDescription: array[0..WSADESCRIPTION_LEN] of Char;
 
620
    szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char;
 
621
    iMaxSockets: Word;
 
622
    iMaxUdpDg: Word;
 
623
    lpVendorInfo: PChar;
 
624
  end;
 
625
 
 
626
{       WSAOVERLAPPED = Record
 
627
                Internal: LongInt;
 
628
                InternalHigh: LongInt;
 
629
                Offset: LongInt;
 
630
                OffsetHigh: LongInt;
 
631
                hEvent: WSAEVENT;
 
632
        end;}
 
633
        WSAOVERLAPPED = TOverlapped;
 
634
        TWSAOverlapped = WSAOverlapped;
 
635
        PWSAOverlapped = ^WSAOverlapped;
 
636
        LPWSAOVERLAPPED = PWSAOverlapped;
 
637
 
 
638
{       WinSock 2 extension -- WSABUF and QOS struct, include qos.h }
 
639
{ to pull in FLOWSPEC and related definitions }
 
640
 
 
641
 
 
642
        WSABUF = record
 
643
                len: U_LONG;    { the length of the buffer }
 
644
                buf: PChar;     { the pointer to the buffer }
 
645
        end {WSABUF};
 
646
        PWSABUF = ^WSABUF;
 
647
        LPWSABUF = PWSABUF;
 
648
 
 
649
        TServiceType = LongInt;
 
650
 
 
651
        TFlowSpec = Record
 
652
                TokenRate,               // In Bytes/sec
 
653
                TokenBucketSize,         // In Bytes
 
654
                PeakBandwidth,           // In Bytes/sec
 
655
                Latency,                 // In microseconds
 
656
                DelayVariation : LongInt;// In microseconds
 
657
                ServiceType : TServiceType;
 
658
                MaxSduSize,     MinimumPolicedSize : LongInt;// In Bytes
 
659
        end;
 
660
        PFlowSpec = ^TFLOWSPEC;
 
661
 
 
662
        TQualityOfService = record
 
663
                SendingFlowspec: TFlowSpec;     { the flow spec for data sending }
 
664
                ReceivingFlowspec: TFlowSpec;   { the flow spec for data receiving }
 
665
                ProviderSpecific: WSABUF; { additional provider specific stuff }
 
666
        end {TQualityOfService};
 
667
        PQOS = ^TQualityOfService;
 
668
        LPQOS = PQOS;
 
669
 
 
670
Const
 
671
        SERVICETYPE_NOTRAFFIC             =  $00000000;  // No data in this direction
 
672
        SERVICETYPE_BESTEFFORT            =  $00000001;  // Best Effort
 
673
        SERVICETYPE_CONTROLLEDLOAD        =  $00000002;  // Controlled Load
 
674
        SERVICETYPE_GUARANTEED            =  $00000003;  // Guaranteed
 
675
        SERVICETYPE_NETWORK_UNAVAILABLE   =  $00000004;  // Used to notify change to user
 
676
        SERVICETYPE_GENERAL_INFORMATION   =  $00000005;  // corresponds to "General Parameters" defined by IntServ
 
677
        SERVICETYPE_NOCHANGE              =  $00000006;  // used to indicate that the flow spec contains no change from any previous one
 
678
// to turn on immediate traffic control, OR this flag with the ServiceType field in teh FLOWSPEC
 
679
        SERVICE_IMMEDIATE_TRAFFIC_CONTROL =  $80000000;
 
680
 
 
681
{       WinSock 2 extension -- manifest constants for return values of the condition function }
 
682
        CF_ACCEPT = $0000;
 
683
        CF_REJECT = $0001;
 
684
        CF_DEFER = $0002;
 
685
 
 
686
{       WinSock 2 extension -- manifest constants for shutdown() }
 
687
        SD_RECEIVE = $00;
 
688
        SD_SEND = $01;
 
689
        SD_BOTH = $02;
 
690
 
 
691
{       WinSock 2 extension -- data type and manifest constants for socket groups }
 
692
        SG_UNCONSTRAINED_GROUP = $01;
 
693
        SG_CONSTRAINED_GROUP = $02;
 
694
Type
 
695
        GROUP = Word;
 
696
 
 
697
{       WinSock 2 extension -- data type for WSAEnumNetworkEvents() }
 
698
        TWSANetworkEvents = record
 
699
                lNetworkEvents: LongInt;
 
700
                iErrorCode: Array[0..FD_MAX_EVENTS-1] of Longint;
 
701
        end {TWSANetworkEvents};
 
702
        PWSANetworkEvents = ^TWSANetworkEvents;
 
703
        LPWSANetworkEvents = PWSANetworkEvents;
 
704
 
 
705
        TWSAProtocolChain = record
 
706
                ChainLen: Longint;      // the length of the chain,
 
707
                // length = 0 means layered protocol,
 
708
                // length = 1 means base protocol,
 
709
                // length > 1 means protocol chain
 
710
                ChainEntries: Array[0..MAX_PROTOCOL_CHAIN-1] of LongInt; { a list of dwCatalogEntryIds }
 
711
        end {TWSAPROTOCOLCHAIN};
 
712
 
 
713
Type
 
714
        TWSAProtocol_InfoA = record
 
715
                dwServiceFlags1: LongInt;
 
716
                dwServiceFlags2: LongInt;
 
717
                dwServiceFlags3: LongInt;
 
718
                dwServiceFlags4: LongInt;
 
719
                dwProviderFlags: LongInt;
 
720
                ProviderId: TGUID;
 
721
                dwCatalogEntryId: LongInt;
 
722
                ProtocolChain: TWSAProtocolChain;
 
723
                iVersion: Longint;
 
724
                iAddressFamily: Longint;
 
725
                iMaxSockAddr: Longint;
 
726
                iMinSockAddr: Longint;
 
727
                iSocketType: Longint;
 
728
                iProtocol: Longint;
 
729
                iProtocolMaxOffset: Longint;
 
730
                iNetworkByteOrder: Longint;
 
731
                iSecurityScheme: Longint;
 
732
                dwMessageSize: LongInt;
 
733
                dwProviderReserved: LongInt;
 
734
                szProtocol: Array[0..WSAPROTOCOL_LEN+1-1] of Char;
 
735
        end {TWSAProtocol_InfoA};
 
736
        PWSAProtocol_InfoA = ^TWSAProtocol_InfoA;
 
737
        LPWSAProtocol_InfoA = PWSAProtocol_InfoA;
 
738
 
 
739
        TWSAProtocol_InfoW = record
 
740
                dwServiceFlags1: LongInt;
 
741
                dwServiceFlags2: LongInt;
 
742
                dwServiceFlags3: LongInt;
 
743
                dwServiceFlags4: LongInt;
 
744
                dwProviderFlags: LongInt;
 
745
                ProviderId: TGUID;
 
746
                dwCatalogEntryId: LongInt;
 
747
                ProtocolChain: TWSAProtocolChain;
 
748
                iVersion: Longint;
 
749
                iAddressFamily: Longint;
 
750
                iMaxSockAddr: Longint;
 
751
                iMinSockAddr: Longint;
 
752
                iSocketType: Longint;
 
753
                iProtocol: Longint;
 
754
                iProtocolMaxOffset: Longint;
 
755
                iNetworkByteOrder: Longint;
 
756
                iSecurityScheme: Longint;
 
757
                dwMessageSize: LongInt;
 
758
                dwProviderReserved: LongInt;
 
759
                szProtocol: Array[0..(WSAPROTOCOL_LEN+1-1)] of WideChar;
 
760
        end {TWSAProtocol_InfoW};
 
761
        PWSAProtocol_InfoW = ^TWSAProtocol_InfoW;
 
762
        LPWSAProtocol_InfoW = PWSAProtocol_InfoW;
 
763
 
 
764
{$IFDEF UNICODE}
 
765
        TWSAProtocol_Info = TWSAProtocol_InfoW;
 
766
        LPWSAProtocol_Info = PWSAProtocol_InfoW;
 
767
{$ELSE}
 
768
        TWSAProtocol_Info = TWSAProtocol_InfoA;
 
769
        LPWSAProtocol_Info = PWSAProtocol_InfoA;
 
770
{$ENDIF}
 
771
 
 
772
{       Flag bit definitions for dwProviderFlags */ }
 
773
Const
 
774
        PFL_MULTIPLE_PROTO_ENTRIES = $00000001;
 
775
        PFL_RECOMMENDED_PROTO_ENTRY = $00000002;
 
776
        PFL_HIDDEN = $00000004;
 
777
        PFL_MATCHES_PROTOCOL_ZERO = $00000008;
 
778
 
 
779
{       Flag bit definitions for dwServiceFlags1 */ }
 
780
        XP1_CONNECTIONLESS = $00000001;
 
781
        XP1_GUARANTEED_DELIVERY = $00000002;
 
782
        XP1_GUARANTEED_ORDER = $00000004;
 
783
        XP1_MESSAGE_ORIENTED = $00000008;
 
784
        XP1_PSEUDO_STREAM = $00000010;
 
785
        XP1_GRACEFUL_CLOSE = $00000020;
 
786
        XP1_EXPEDITED_DATA = $00000040;
 
787
        XP1_CONNECT_DATA = $00000080;
 
788
        XP1_DISCONNECT_DATA = $00000100;
 
789
        XP1_SUPPORT_BROADCAST = $00000200;
 
790
        XP1_SUPPORT_MULTIPOINT = $00000400;
 
791
        XP1_MULTIPOINT_CONTROL_PLANE = $00000800;
 
792
        XP1_MULTIPOINT_DATA_PLANE = $00001000;
 
793
        XP1_QOS_SUPPORTED = $00002000;
 
794
        XP1_INTERRUPT = $00004000;
 
795
        XP1_UNI_SEND = $00008000;
 
796
        XP1_UNI_RECV = $00010000;
 
797
        XP1_IFS_HANDLES = $00020000;
 
798
        XP1_PARTIAL_MESSAGE = $00040000;
 
799
 
 
800
        BIGENDIAN = $0000;
 
801
        LITTLEENDIAN = $0001;
 
802
 
 
803
        SECURITY_PROTOCOL_NONE = $0000;
 
804
 
 
805
{       WinSock 2 extension -- manifest constants for WSAJoinLeaf() }
 
806
        JL_SENDER_ONLY = $01;
 
807
        JL_RECEIVER_ONLY = $02;
 
808
        JL_BOTH = $04;
 
809
 
 
810
{ WinSock 2 extension -- manifest constants for WSASocket() }
 
811
        WSA_FLAG_OVERLAPPED = $01;
 
812
        WSA_FLAG_MULTIPOINT_C_ROOT = $02;
 
813
        WSA_FLAG_MULTIPOINT_C_LEAF = $04;
 
814
        WSA_FLAG_MULTIPOINT_D_ROOT = $08;
 
815
        WSA_FLAG_MULTIPOINT_D_LEAF = $10;
 
816
 
 
817
{ WinSock 2 extension -- manifest constants for WSAIoctl() }
 
818
        IOC_UNIX = $00000000;
 
819
        IOC_WS2 = $08000000;
 
820
        IOC_PROTOCOL = $10000000;
 
821
        IOC_VENDOR = $18000000;
 
822
 
 
823
        SIO_ASSOCIATE_HANDLE = IOC_IN or IOC_WS2 or 1;
 
824
        SIO_ENABLE_CIRCULAR_QUEUEING = IOC_WS2 or 2;
 
825
        SIO_FIND_ROUTE = IOC_OUT or IOC_WS2 or 3;
 
826
        SIO_FLUSH = IOC_WS2 or 4;
 
827
        SIO_GET_BROADCAST_ADDRESS = IOC_OUT or IOC_WS2 or 5;
 
828
        SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT or IOC_WS2 or 6;
 
829
        SIO_GET_QOS = IOC_INOUT or IOC_WS2 or 7;
 
830
        SIO_GET_GROUP_QOS = IOC_INOUT or IOC_WS2 or 8;
 
831
        SIO_MULTIPOINT_LOOPBACK = IOC_IN or IOC_WS2 or 9;
 
832
        SIO_MULTICAST_SCOPE = IOC_IN or IOC_WS2 or 10;
 
833
        SIO_SET_QOS = IOC_IN or IOC_WS2 or 11;
 
834
        SIO_SET_GROUP_QOS = IOC_IN or IOC_WS2 or 12;
 
835
        SIO_TRANSLATE_HANDLE = IOC_INOUT or IOC_WS2 or 13;
 
836
 
 
837
{WinSock 2 extension -- manifest constants for SIO_TRANSLATE_HANDLE ioctl }
 
838
        TH_NETDEV = $00000001;
 
839
        TH_TAPI = $00000002;
 
840
 
 
841
Const
 
842
        SERVICE_MULTIPLE = $00000001;
 
843
 
 
844
{ & Name Spaces }
 
845
        NS_ALL = (0);
 
846
 
 
847
        NS_SAP = (1);
 
848
        NS_NDS = (2);
 
849
        NS_PEER_BROWSE = (3);
 
850
 
 
851
        NS_TCPIP_LOCAL = (10);
 
852
        NS_TCPIP_HOSTS = (11);
 
853
        NS_DNS = (12);
 
854
        NS_NETBT = (13);
 
855
        NS_WINS = (14);
 
856
 
 
857
        NS_NBP = (20);
 
858
 
 
859
        NS_MS = (30);
 
860
        NS_STDA = (31);
 
861
        NS_NTDS = (32);
 
862
 
 
863
        NS_X500 = (40);
 
864
        NS_NIS = (41);
 
865
        NS_NISPLUS = (42);
 
866
 
 
867
        NS_WRQ = (50);
 
868
 
 
869
{       Resolution flags for WSAGetAddressByName().
 
870
        Note these are also used by the 1.1 API GetAddressByName, so leave them around. }
 
871
        RES_UNUSED_1 = $00000001;
 
872
        RES_FLUSH_CACHE = $00000002;
 
873
        RES_SERVICE = $00000004;
 
874
 
 
875
{       Well known value names for Service Types }
 
876
        SERVICE_TYPE_VALUE_IPXPORTA = 'IpxSocket';
 
877
{$ifndef FPC}{TODO}
 
878
        SERVICE_TYPE_VALUE_IPXPORTW : PWideChar = 'IpxSocket';
 
879
        SERVICE_TYPE_VALUE_SAPIDA = 'SapId';
 
880
        SERVICE_TYPE_VALUE_SAPIDW : PWideChar = 'SapId';
 
881
 
 
882
        SERVICE_TYPE_VALUE_TCPPORTA = 'TcpPort';
 
883
        SERVICE_TYPE_VALUE_TCPPORTW : PWideChar = 'TcpPort';
 
884
 
 
885
        SERVICE_TYPE_VALUE_UDPPORTA = 'UdpPort';
 
886
        SERVICE_TYPE_VALUE_UDPPORTW : PWideChar = 'UdpPort';
 
887
 
 
888
        SERVICE_TYPE_VALUE_OBJECTIDA = 'ObjectId';
 
889
        SERVICE_TYPE_VALUE_OBJECTIDW : PWideChar = 'ObjectId';
 
890
 
 
891
{$IFDEF UNICODE}
 
892
        SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDW;
 
893
        SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTW;
 
894
        SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTW;
 
895
        SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDW;
 
896
{$ELSE}
 
897
        SERVICE_TYPE_VALUE_SAPID = SERVICE_TYPE_VALUE_SAPIDA;
 
898
        SERVICE_TYPE_VALUE_TCPPORT = SERVICE_TYPE_VALUE_TCPPORTA;
 
899
        SERVICE_TYPE_VALUE_UDPPORT = SERVICE_TYPE_VALUE_UDPPORTA;
 
900
        SERVICE_TYPE_VALUE_OBJECTID = SERVICE_TYPE_VALUE_OBJECTIDA;
 
901
{$ENDIF}
 
902
 
 
903
{$endif}{FPC}
 
904
 
 
905
{ SockAddr Information }
 
906
 
 
907
 
 
908
Type
 
909
        SOCKET_ADDRESS = record
 
910
                lpSockaddr : PSockAddr;
 
911
                iSockaddrLength : Longint;
 
912
        end {SOCKET_ADDRESS};
 
913
        PSOCKET_ADDRESS = ^SOCKET_ADDRESS;
 
914
 
 
915
{ CSAddr Information }
 
916
        CSADDR_INFO = record
 
917
                LocalAddr, RemoteAddr: SOCKET_ADDRESS;
 
918
                iSocketType, iProtocol : LongInt;
 
919
        end {CSADDR_INFO};
 
920
        PCSADDR_INFO = ^CSADDR_INFO;
 
921
 
 
922
{       Address Family/Protocol Tuples }
 
923
        TAFProtocols = record
 
924
                iAddressFamily: Longint;
 
925
                iProtocol: Longint;
 
926
        end {AFPROTOCOLS};
 
927
        PAFProtocols = TAFProtocols;
 
928
 
 
929
{       Client Query API Typedefs }
 
930
 
 
931
{ The comparators }
 
932
        TWSAEComparator = (COMP_EQUAL {= 0}, COMP_NOTLESS );
 
933
 
 
934
        TWSAVersion = record
 
935
                dwVersion: LongInt;
 
936
                ecHow: TWSAEComparator;
 
937
        end {TWSAVersion};
 
938
        PWSAVersion = ^TWSAVersion;
 
939
 
 
940
        TWSAQuerySetA = record
 
941
                dwSize: LongInt;
 
942
                lpszServiceInstanceName: PChar;
 
943
                lpServiceClassId: PGUID;
 
944
                lpVersion: PWSAVERSION;
 
945
                lpszComment: PChar;
 
946
                dwNameSpace: LongInt;
 
947
                lpNSProviderId: PGUID;
 
948
                lpszContext: PChar;
 
949
                dwNumberOfProtocols: LongInt;
 
950
                lpafpProtocols: PAFProtocols;
 
951
                lpszQueryString: PChar;
 
952
                dwNumberOfCsAddrs: LongInt;
 
953
                lpcsaBuffer: PCSADDR_INFO;
 
954
                dwOutputFlags: LongInt;
 
955
                lpBlob: PBLOB;
 
956
        end {TWSAQuerySetA};
 
957
        PWSAQuerySetA = ^TWSAQuerySetA;
 
958
        LPWSAQuerySetA = PWSAQuerySetA;
 
959
        TWSAQuerySetW = record
 
960
                dwSize: LongInt;
 
961
                lpszServiceInstanceName: PWideChar;
 
962
                lpServiceClassId: PGUID;
 
963
                lpVersion: PWSAVERSION;
 
964
                lpszComment: PWideChar;
 
965
                dwNameSpace: LongInt;
 
966
                lpNSProviderId: PGUID;
 
967
                lpszContext: PWideChar;
 
968
                dwNumberOfProtocols: LongInt;
 
969
                lpafpProtocols: PAFProtocols;
 
970
                lpszQueryString: PWideChar;
 
971
                dwNumberOfCsAddrs: LongInt;
 
972
                lpcsaBuffer: PCSADDR_INFO;
 
973
                dwOutputFlags: LongInt;
 
974
                lpBlob: PBLOB;
 
975
        end {TWSAQuerySetW};
 
976
        PWSAQuerySetW = ^TWSAQuerySetW;
 
977
        LPWSAQuerySetW = PWSAQuerySetW;
 
978
{$IFDEF UNICODE}
 
979
        PWSAQuerySet = PWSAQuerySetW;
 
980
        LPWSAQuerySet = PWSAQuerySetW;
 
981
{$ELSE}
 
982
        PWSAQuerySet = PWSAQuerySetA;
 
983
        LPWSAQuerySet = PWSAQuerySetA;
 
984
{$ENDIF}
 
985
 
 
986
Const
 
987
        LUP_DEEP = $0001;
 
988
        LUP_CONTAINERS = $0002;
 
989
        LUP_NOCONTAINERS = $0004;
 
990
        LUP_NEAREST = $0008;
 
991
        LUP_RETURN_NAME = $0010;
 
992
        LUP_RETURN_TYPE = $0020;
 
993
        LUP_RETURN_VERSION = $0040;
 
994
        LUP_RETURN_COMMENT = $0080;
 
995
        LUP_RETURN_ADDR = $0100;
 
996
        LUP_RETURN_BLOB = $0200;
 
997
        LUP_RETURN_ALIASES = $0400;
 
998
        LUP_RETURN_QUERY_STRING = $0800;
 
999
        LUP_RETURN_ALL = $0FF0;
 
1000
        LUP_RES_SERVICE = $8000;
 
1001
 
 
1002
        LUP_FLUSHCACHE = $1000;
 
1003
        LUP_FLUSHPREVIOUS = $2000;
 
1004
 
 
1005
 
 
1006
{       Return flags }
 
1007
        RESULT_IS_ALIAS = $0001;
 
1008
 
 
1009
Type
 
1010
{ Service Address Registration and Deregistration Data Types. }
 
1011
        TWSAeSetServiceOp = (RNRSERVICE_REGISTER{=0},RNRSERVICE_DEREGISTER,RNRSERVICE_DELETE);
 
1012
 
 
1013
{       Service Installation/Removal Data Types. }
 
1014
        TWSANSClassInfoA = record
 
1015
                lpszName: PChar;
 
1016
                dwNameSpace: LongInt;
 
1017
                dwValueType: LongInt;
 
1018
                dwValueSize: LongInt;
 
1019
                lpValue: Pointer;
 
1020
        end {_WSANSClassInfoA};
 
1021
        PWSANSClassInfoA = ^TWSANSClassInfoA;
 
1022
        TWSANSClassInfoW = record
 
1023
                lpszName: PWideChar;
 
1024
                dwNameSpace: LongInt;
 
1025
                dwValueType: LongInt;
 
1026
                dwValueSize: LongInt;
 
1027
                lpValue: Pointer;
 
1028
        end {TWSANSClassInfoW};
 
1029
        PWSANSClassInfoW = ^TWSANSClassInfoW;
 
1030
{$IFDEF UNICODE}
 
1031
        TWSANSClassInfo = TWSANSClassInfoW;
 
1032
        PWSANSClassInfo = PWSANSClassInfoW;
 
1033
        LPWSANSClassInfo = PWSANSClassInfoW;
 
1034
{$ELSE}
 
1035
        TWSANSClassInfo = TWSANSClassInfoA;
 
1036
        PWSANSClassInfo = PWSANSClassInfoA;
 
1037
        LPWSANSClassInfo = PWSANSClassInfoA;
 
1038
{$ENDIF // UNICODE}
 
1039
 
 
1040
        TWSAServiceClassInfoA = record
 
1041
                lpServiceClassId: PGUID;
 
1042
                lpszServiceClassName: PChar;
 
1043
                dwCount: LongInt;
 
1044
                lpClassInfos: PWSANSClassInfoA;
 
1045
        end {TWSAServiceClassInfoA};
 
1046
        PWSAServiceClassInfoA = ^TWSAServiceClassInfoA;
 
1047
        LPWSAServiceClassInfoA = PWSAServiceClassInfoA;
 
1048
        TWSAServiceClassInfoW = record
 
1049
                lpServiceClassId: PGUID;
 
1050
                lpszServiceClassName: PWideChar;
 
1051
                dwCount: LongInt;
 
1052
                lpClassInfos: PWSANSClassInfoW;
 
1053
        end {TWSAServiceClassInfoW};
 
1054
        PWSAServiceClassInfoW = ^TWSAServiceClassInfoW;
 
1055
        LPWSAServiceClassInfoW = PWSAServiceClassInfoW;
 
1056
{$IFDEF UNICODE}
 
1057
        TWSAServiceClassInfo = TWSAServiceClassInfoW;
 
1058
        PWSAServiceClassInfo = PWSAServiceClassInfoW;
 
1059
        LPWSAServiceClassInfo = PWSAServiceClassInfoW;
 
1060
{$ELSE}
 
1061
        TWSAServiceClassInfo = TWSAServiceClassInfoA;
 
1062
        PWSAServiceClassInfo = PWSAServiceClassInfoA;
 
1063
        LPWSAServiceClassInfo = PWSAServiceClassInfoA;
 
1064
{$ENDIF}
 
1065
 
 
1066
        TWSANameSpace_InfoA = record
 
1067
                NSProviderId: TGUID;
 
1068
                dwNameSpace: LongInt;
 
1069
                fActive: LongInt{Bool};
 
1070
                dwVersion: LongInt;
 
1071
                lpszIdentifier: PChar;
 
1072
        end {TWSANameSpace_InfoA};
 
1073
        PWSANameSpace_InfoA = ^TWSANameSpace_InfoA;
 
1074
        LPWSANameSpace_InfoA = PWSANameSpace_InfoA;
 
1075
        TWSANameSpace_InfoW = record
 
1076
                NSProviderId: TGUID;
 
1077
                dwNameSpace: LongInt;
 
1078
                fActive: LongInt{Bool};
 
1079
                dwVersion: LongInt;
 
1080
                lpszIdentifier: PWideChar;
 
1081
        end {TWSANameSpace_InfoW};
 
1082
        PWSANameSpace_InfoW = ^TWSANameSpace_InfoW;
 
1083
        LPWSANameSpace_InfoW = PWSANameSpace_InfoW;
 
1084
{$IFDEF UNICODE}
 
1085
        TWSANameSpace_Info = TWSANameSpace_InfoW;
 
1086
        PWSANameSpace_Info = PWSANameSpace_InfoW;
 
1087
        LPWSANameSpace_Info = PWSANameSpace_InfoW;
 
1088
{$ELSE}
 
1089
        TWSANameSpace_Info = TWSANameSpace_InfoA;
 
1090
        PWSANameSpace_Info = PWSANameSpace_InfoA;
 
1091
        LPWSANameSpace_Info = PWSANameSpace_InfoA;
 
1092
{$ENDIF}
 
1093
 
 
1094
{       WinSock 2 extensions -- data types for the condition function in }
 
1095
{ WSAAccept() and overlapped I/O completion routine. }
 
1096
Type
 
1097
        LPCONDITIONPROC = function (lpCallerId: LPWSABUF; lpCallerData : LPWSABUF; lpSQOS,lpGQOS : LPQOS; lpCalleeId,lpCalleeData : LPWSABUF;
 
1098
                g : GROUP; dwCallbackData : DWORD ) : Longint;
 
1099
        LPWSAOVERLAPPED_COMPLETION_ROUTINE = procedure ( const dwError, cbTransferred : DWORD; const lpOverlapped : LPWSAOVERLAPPED; const dwFlags : DWORD );
 
1100
 
 
1101
 
 
1102
//begin common win & wince
 
1103
function accept( const s: TSocket; addr: PSockAddr; addrlen: PLongint ): TSocket; external WINSOCK2_DLL name 'accept';
 
1104
function accept( const s: TSocket; addr: PSockAddr; var addrlen: Longint ): TSocket; external WINSOCK2_DLL name 'accept';
 
1105
function bind( const s: TSocket; addr: PSockAddr; const namelen: Longint ): Longint; external WINSOCK2_DLL name 'bind';
 
1106
function bind( const s: TSocket; const addr: TSockAddr; namelen: Longint ): Longint; external WINSOCK2_DLL name 'bind';
 
1107
function closesocket( const s: TSocket ): Longint; external WINSOCK2_DLL name 'closesocket';
 
1108
function connect( const s: TSocket; name: PSockAddr; namelen: Longint): Longint; external WINSOCK2_DLL name 'connect';
 
1109
function connect( const s: TSocket; const name: TSockAddr; namelen: Longint): Longint; external WINSOCK2_DLL name 'connect';
 
1110
 
 
1111
function gethostbyaddr(addr: Pointer; len, struct: Longint): PHostEnt; external WINSOCK2_DLL name 'gethostbyaddr';
 
1112
function gethostbyname(name: PChar): PHostEnt; external WINSOCK2_DLL name 'gethostbyname';
 
1113
function gethostname(name: PChar; len: Longint): Longint; external WINSOCK2_DLL name 'gethostname';
 
1114
function getpeername( const s: TSocket; var name: TSockAddr; var namelen: Longint ): Longint; external WINSOCK2_DLL name 'getpeername';
 
1115
function getprotobyname(name: PChar): PProtoEnt; external WINSOCK2_DLL name 'getprotobyname';
 
1116
function getprotobynumber(proto: Longint): PProtoEnt; external WINSOCK2_DLL name 'getprotobynumber';
 
1117
function getservbyport(port: Longint; proto: PChar): PServEnt; external WINSOCK2_DLL name 'getservbyport';
 
1118
function getservbyname(name, proto: PChar): PServEnt; external WINSOCK2_DLL name 'getservbyname';
 
1119
function getsockname( const s: TSocket; var name: TSockAddr; var namelen: Longint ): Longint; external WINSOCK2_DLL name 'getsockname';
 
1120
function getsockopt( const s: TSocket; const level, optname: Longint; optval: PChar; var optlen: Longint ): Longint; external WINSOCK2_DLL name 'getsockopt';
 
1121
function getsockopt( const s: TSocket; const level, optname: Longint; optval: Pointer; var optlen: Longint ): Longint; external WINSOCK2_DLL name 'getsockopt';
 
1122
function getsockopt( const s: TSocket; const level, optname: Longint; var optval; var optlen: Longint ): Longint; external WINSOCK2_DLL name 'getsockopt';
 
1123
function htonl(hostlong: u_long): u_long; external WINSOCK2_DLL name 'htonl';
 
1124
function htons(hostshort: u_short): u_short; external WINSOCK2_DLL name 'htons';
 
1125
function inet_addr(cp: PChar): u_long; external WINSOCK2_DLL name 'inet_addr';
 
1126
function inet_ntoa(inaddr: TInAddr): PChar; external WINSOCK2_DLL name 'inet_ntoa';
 
1127
function ioctlsocket( const s: TSocket; cmd: Longint; var arg: u_long ): Longint; external WINSOCK2_DLL name 'ioctlsocket';
 
1128
function ioctlsocket( const s: TSocket; cmd: Longint; argp: pu_long ): Longint; external WINSOCK2_DLL name 'ioctlsocket';
 
1129
function listen(s: TSocket; backlog: Longint): Longint; external WINSOCK2_DLL name 'listen';
 
1130
function ntohl(netlong: u_long): u_long; external WINSOCK2_DLL name 'ntohl';
 
1131
function ntohs(netshort: u_short): u_short; external WINSOCK2_DLL name 'ntohs';
 
1132
function recv(s: TSocket; var Buf; len, flags: Longint): Longint; external WINSOCK2_DLL name 'recv';
 
1133
function recv(s: TSocket; Buf: PChar; len, flags: Longint): Longint; external WINSOCK2_DLL name 'recv';
 
1134
function recv(s: TSocket; Buf: Pointer; len, flags: Longint): Longint; external WINSOCK2_DLL name 'recv';
 
1135
function recvfrom(s: TSocket; Buf: PChar; len, flags: Longint; from: PSockAddr; fromlen: PLongint): Longint; external WINSOCK2_DLL name 'recvfrom';
 
1136
function recvfrom(s: TSocket; Buf: Pointer; len, flags: Longint; from: PSockAddr; fromlen: PLongint): Longint; external WINSOCK2_DLL name 'recvfrom';
 
1137
function recvfrom(s: TSocket; var Buf; len, flags: Longint; const from: TSockAddr; var fromlen: Longint): Longint; external WINSOCK2_DLL name 'recvfrom';
 
1138
function select(nfds: Longint; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint; external WINSOCK2_DLL name 'select';
 
1139
function send(s: TSocket; const Buf; len, flags: Longint): Longint; external WINSOCK2_DLL name 'send';
 
1140
function send(s: TSocket; Buf: PChar; len, flags: Longint): Longint; external WINSOCK2_DLL name 'send';
 
1141
function send(s: TSocket; Buf: Pointer; len, flags: Longint): Longint; external WINSOCK2_DLL name 'send';
 
1142
function sendto(s: TSocket; const Buf; len, flags: Longint; const addrto: TSockAddr; tolen: Longint): Longint; external WINSOCK2_DLL name 'sendto';
 
1143
function sendto(s: TSocket; Buf: PChar; len, flags: Longint; addrto: PSockAddr; tolen: Longint): Longint; external WINSOCK2_DLL name 'sendto';
 
1144
function sendto(s: TSocket; Buf: Pointer; len, flags: Longint; addrto: PSockAddr; tolen: Longint): Longint; external WINSOCK2_DLL name 'sendto';
 
1145
function setsockopt(s: TSocket; level, optname: Longint; const optval; optlen: Longint): Longint; external WINSOCK2_DLL name 'setsockopt';
 
1146
function setsockopt(s: TSocket; level, optname: Longint; optval: PChar; optlen: Longint): Longint; external WINSOCK2_DLL name 'setsockopt';
 
1147
function setsockopt(s: TSocket; level, optname: Longint; optval: Pointer; optlen: Longint): Longint; external WINSOCK2_DLL name 'setsockopt';
 
1148
function shutdown(s: TSocket; how: Longint): Longint; external WINSOCK2_DLL name 'shutdown';
 
1149
function socket(af, struct, protocol: Longint): TSocket; external WINSOCK2_DLL name 'socket';
 
1150
 
 
1151
{       WinSock 2 API new function prototypes }
 
1152
function WSAAccept( s : TSocket; addr : TSockAddr; addrlen : PLongint; lpfnCondition : LPCONDITIONPROC; dwCallbackData : DWORD ): TSocket;  external WINSOCK2_DLL name 'WSAAccept';
 
1153
function WSAAddressToStringW( var lpsaAddress : TSockAddr; const dwAddressLength : DWORD; const lpProtocolInfo : LPWSAProtocol_InfoW;
 
1154
        const lpszAddressString : PWideChar; var lpdwAddressStringLength : DWORD ): Longint;  external WINSOCK2_DLL name 'WSAAddressToStringW';
 
1155
function WSAAsyncGetHostByName(HWindow: HWND; wMsg: u_int; name, buf: PChar; buflen: Longint): THandle;  external WINSOCK2_DLL name 'WSAAsyncGetHostByName';
 
1156
function WSAAsyncSelect(s: TSocket; HWindow: HWND; wMsg: u_int; lEvent: Longint): Longint;  external WINSOCK2_DLL name 'WSAAsyncSelect';
 
1157
function WSACancelAsyncRequest(hAsyncTaskHandle: THandle): Longint;  external WINSOCK2_DLL name 'WSACancelAsyncRequest';
 
1158
function WSACleanup: Longint;  external WINSOCK2_DLL name 'WSACleanup';
 
1159
function WSACloseEvent( hEvent : WSAEVENT) : WordBool;  external WINSOCK2_DLL name 'WSACloseEvent';
 
1160
function WSAConnect( s : TSocket; const name : PSockAddr; namelen : Longint; lpCallerData,lpCalleeData : LPWSABUF; lpSQOS,lpGQOS : LPQOS ) : Longint;  external WINSOCK2_DLL name 'WSAConnect';
 
1161
function WSACreateEvent : WSAEVENT;  external WINSOCK2_DLL name 'WSACreateEvent';
 
1162
function WSAEnumNameSpaceProvidersW( var lpdwBufferLength: DWORD; const lpnspBuffer: LPWSANameSpace_InfoW ): Longint;  external WINSOCK2_DLL name 'WSAEnumNameSpaceProvidersW';
 
1163
function WSAEnumNetworkEvents( const s : TSocket; const hEventObject : WSAEVENT; lpNetworkEvents : LPWSANETWORKEVENTS ) :Longint;  external WINSOCK2_DLL name 'WSAEnumNetworkEvents';
 
1164
function WSAEnumProtocolsW( lpiProtocols : PLongint; lpProtocolBuffer : LPWSAProtocol_InfoW; var lpdwBufferLength : DWORD ) : Longint;  external WINSOCK2_DLL name 'WSAEnumProtocolsW';
 
1165
function WSAEventSelect( s : TSocket; hEventObject : WSAEVENT; lNetworkEvents : LongInt ): Longint;  external WINSOCK2_DLL name 'WSAEventSelect';
 
1166
function WSAGetLastError: Longint;  external WINSOCK2_DLL name 'WSAGetLastError';
 
1167
function WSAGetOverlappedResult( s : TSocket; lpOverlapped : LPWSAOVERLAPPED; lpcbTransfer : LPDWORD; fWait : BOOL; var lpdwFlags : DWORD ) : WordBool;  external WINSOCK2_DLL name 'WSAGetOverlappedResult';
 
1168
function WSAhtonl( s : TSocket; hostlong : u_long; var lpnetlong : DWORD ): Longint;  external WINSOCK2_DLL name 'WSAhtonl';
 
1169
function WSAhtons( s : TSocket; hostshort : u_short; var lpnetshort : WORD ): Longint;  external WINSOCK2_DLL name 'WSAhtons';
 
1170
function WSAIoctl( s : TSocket; dwIoControlCode : DWORD; lpvInBuffer : Pointer; cbInBuffer : DWORD; lpvOutBuffer : Pointer; cbOutBuffer : DWORD;
 
1171
        lpcbBytesReturned : LPDWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ) : Longint;  external WINSOCK2_DLL name 'WSAIoctl';
 
1172
function WSAJoinLeaf( s : TSocket; name : PSockAddr; namelen : Longint; lpCallerData,lpCalleeData : LPWSABUF;
 
1173
        lpSQOS,lpGQOS : LPQOS; dwFlags : DWORD ) : TSocket;  external WINSOCK2_DLL name 'WSAJoinLeaf';
 
1174
function WSALookupServiceBeginW( const lpqsRestrictions : LPWSAQuerySetW; const dwControlFlags : DWORD; lphLookup : PHANDLE ): Longint;  external WINSOCK2_DLL name 'WSALookupServiceBeginW';
 
1175
function WSALookupServiceEnd( const hLookup : THandle ): Longint;  external WINSOCK2_DLL name 'WSALookupServiceEnd';
 
1176
function WSALookupServiceNextW( const hLookup : THandle; const dwControlFlags : DWORD; var lpdwBufferLength : DWORD; lpqsResults : LPWSAQuerySetW ): Longint;  external WINSOCK2_DLL name 'WSALookupServiceNextW';
 
1177
function WSANtohl( s : TSocket; netlong : u_long; var lphostlong : DWORD ): Longint;  external WINSOCK2_DLL name 'WSANtohl';
 
1178
function WSANtohs( s : TSocket; netshort : u_short; var lphostshort : WORD ): Longint;  external WINSOCK2_DLL name 'WSANtohs';
 
1179
function WSARecv( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD;
 
1180
        lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Longint;  external WINSOCK2_DLL name 'WSARecv';
 
1181
function WSARecvFrom( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD;
 
1182
        lpFrom : PSockAddr; lpFromlen : PLongint; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Longint;  external WINSOCK2_DLL name 'WSARecvFrom';
 
1183
function WSAResetEvent( hEvent : WSAEVENT ): WordBool;  external WINSOCK2_DLL name 'WSAResetEvent';
 
1184
function WSASend( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD;
 
1185
        lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Longint;  external WINSOCK2_DLL name 'WSASend';
 
1186
function WSASendTo( s : TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD;
 
1187
        lpTo : PSockAddr; iTolen : Longint; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Longint;  external WINSOCK2_DLL name 'WSASendTo';
 
1188
function WSASetEvent( hEvent : WSAEVENT ): WordBool;  external WINSOCK2_DLL name 'WSASetEvent';
 
1189
procedure WSASetLastError(iError: Longint);  external WINSOCK2_DLL name 'WSASetLastError';
 
1190
function WSASetServiceW( const lpqsRegInfo: LPWSAQuerySetW; const essoperation: TWSAeSetServiceOp;
 
1191
        const dwControlFlags: DWORD ): Longint;  external WINSOCK2_DLL name 'WSASetServiceW';
 
1192
function WSASocketW( af, iType, protocol : Longint; lpProtocolInfo : LPWSAProtocol_InfoW; g : GROUP; dwFlags : DWORD ): TSocket;  external WINSOCK2_DLL name 'WSASocketW';
 
1193
function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Longint;  external WINSOCK2_DLL name 'WSAStartup';
 
1194
function WSAStringToAddressW( const AddressString : PWideChar; const AddressFamily: Longint; const lpProtocolInfo : LPWSAProtocol_InfoA;
 
1195
        var lpAddress : TSockAddr; var lpAddressLength : Longint ): Longint;  external WINSOCK2_DLL name 'WSAStringToAddressW';
 
1196
function WSAWaitForMultipleEvents( cEvents : DWORD; lphEvents : PWSAEVENT; fWaitAll : LongBool;
 
1197
        dwTimeout : DWORD; fAlertable : LongBool ): DWORD;  external WINSOCK2_DLL name 'WSAWaitForMultipleEvents';
 
1198
function __WSAFDIsSet(s: TSOcket; var FDSet: TFDSet): Bool;  external WINSOCK2_DLL name '__WSAFDIsSet';
 
1199
 
 
1200
 
 
1201
{ Macros }
 
1202
function WSAMakeSyncReply(Buflen, Error: Word): Longint;
 
1203
function WSAMakeSelectReply(Event, Error: Word): Longint;
 
1204
function WSAGetAsyncBuflen(Param: Longint): Word;
 
1205
function WSAGetAsyncError(Param: Longint): Word;
 
1206
function WSAGetSelectEvent(Param: Longint): Word;
 
1207
function WSAGetSelectError(Param: Longint): Word;
 
1208
 
 
1209
procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet);
 
1210
function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;
 
1211
procedure FD_SET(Socket: TSocket; var FDSet: TFDSet);
 
1212
procedure FD_ZERO(var FDSet: TFDSet);
 
1213
//end common win & wince
 
1214
 
 
1215
{$IFNDEF WINCE}
 
1216
//begin win only
 
1217
function WSAIsBlocking: BOOL;  external WINSOCK2_DLL name 'WSAIsBlocking';
 
1218
function WSAUnhookBlockingHook: Longint;  external WINSOCK2_DLL name 'WSAUnhookBlockingHook';
 
1219
function WSASetBlockingHook(lpBlockFunc: TFarProc): TFarProc;  external WINSOCK2_DLL name 'WSASetBlockingHook';
 
1220
function WSACancelBlockingCall: Longint;  external WINSOCK2_DLL name 'WSACancelBlockingCall';
 
1221
function WSAAsyncGetServByName(HWindow: HWND; wMsg: u_int; name, proto, buf: PChar; buflen: Longint): THandle;  external WINSOCK2_DLL name 'WSAAsyncGetServByName';
 
1222
function WSAAsyncGetServByPort( HWindow: HWND; wMsg, port: u_int; proto, buf: PChar; buflen: Longint): THandle;  external WINSOCK2_DLL name 'WSAAsyncGetServByPort';
 
1223
function WSAAsyncGetProtoByName(HWindow: HWND; wMsg: u_int; name, buf: PChar; buflen: Longint): THandle;  external WINSOCK2_DLL name 'WSAAsyncGetProtoByName';
 
1224
function WSAAsyncGetProtoByNumber(HWindow: HWND; wMsg: u_int; number: Longint; buf: PChar; buflen: Longint): THandle;  external WINSOCK2_DLL name 'WSAAsyncGetProtoByNumber';
 
1225
function WSAAsyncGetHostByAddr(HWindow: HWND; wMsg: u_int; addr: PChar; len, struct: Longint; buf: PChar; buflen: Longint): THandle;  external WINSOCK2_DLL name 'WSAAsyncGetHostByAddr';
 
1226
 
 
1227
function WSADuplicateSocketA( s : TSocket; dwProcessId : DWORD; lpProtocolInfo : LPWSAProtocol_InfoA ) : Longint;  external WINSOCK2_DLL name 'WSADuplicateSocketA';
 
1228
function WSADuplicateSocketW( s : TSocket; dwProcessId : DWORD; lpProtocolInfo : LPWSAProtocol_InfoW ) : Longint;  external WINSOCK2_DLL name 'WSADuplicateSocketW';
 
1229
function WSADuplicateSocket( s : TSocket; dwProcessId : DWORD; lpProtocolInfo : LPWSAProtocol_Info ) : Longint;  external WINSOCK2_DLL name 'WSADuplicateSocket';
 
1230
function WSAEnumProtocolsA( lpiProtocols : PLongint; lpProtocolBuffer : LPWSAProtocol_InfoA; var lpdwBufferLength : DWORD ) : Longint;  external WINSOCK2_DLL name 'WSAEnumProtocolsA';
 
1231
function WSAEnumProtocols( lpiProtocols : PLongint; lpProtocolBuffer : LPWSAProtocol_Info; var lpdwBufferLength : DWORD ) : Longint;  external WINSOCK2_DLL name 'WSAEnumProtocols';
 
1232
function WSAGetQosByName( s : TSocket; lpQOSName : LPWSABUF; lpQOS : LPQOS ): WordBool;  external WINSOCK2_DLL name 'WSAGetQosByName';
 
1233
function WSARecvDisconnect( s : TSocket; lpInboundDisconnectData : LPWSABUF ): Longint;  external WINSOCK2_DLL name 'WSARecvDisconnect';
 
1234
function WSASendDisconnect( s : TSocket; lpOutboundDisconnectData : LPWSABUF ): Longint;  external WINSOCK2_DLL name 'WSASendDisconnect';
 
1235
function WSASocketA( af, iType, protocol : Longint; lpProtocolInfo : LPWSAProtocol_InfoA; g : GROUP; dwFlags : DWORD ): TSocket;  external WINSOCK2_DLL name 'WSASocketA';
 
1236
function WSASocket( af, iType, protocol : Longint; lpProtocolInfo : LPWSAProtocol_Info; g : GROUP; dwFlags : DWORD ): TSocket;  external WINSOCK2_DLL name 'WSASocket';
 
1237
function WSAAddressToStringA( var lpsaAddress : TSockAddr; const dwAddressLength : DWORD; const lpProtocolInfo : LPWSAProtocol_InfoA;
 
1238
        const lpszAddressString : PChar; var lpdwAddressStringLength : DWORD ): Longint;  external WINSOCK2_DLL name 'WSAAddressToStringA';
 
1239
function WSAAddressToString( var lpsaAddress : TSockAddr; const dwAddressLength : DWORD; const lpProtocolInfo : LPWSAProtocol_Info;
 
1240
        const lpszAddressString : PMBChar; var lpdwAddressStringLength : DWORD ): Longint;  external WINSOCK2_DLL name 'WSAAddressToString';
 
1241
function WSAStringToAddressA( const AddressString : PChar; const AddressFamily: Longint; const lpProtocolInfo : LPWSAProtocol_InfoA;
 
1242
        var lpAddress : TSockAddr; var lpAddressLength : Longint ): Longint;  external WINSOCK2_DLL name 'WSAStringToAddressA';
 
1243
function WSAStringToAddress( const AddressString : PMBChar; const AddressFamily: Longint; const lpProtocolInfo : LPWSAProtocol_Info;
 
1244
        var lpAddress : TSockAddr; var lpAddressLength : Longint ): Longint;  external WINSOCK2_DLL name 'WSAStringToAddress';
 
1245
 
 
1246
{       Registration and Name Resolution API functions }
 
1247
function WSALookupServiceBeginA( const lpqsRestrictions : LPWSAQuerySetA; const dwControlFlags : DWORD; lphLookup : PHANDLE ): Longint;  external WINSOCK2_DLL name 'WSALookupServiceBeginA';
 
1248
function WSALookupServiceBegin( const lpqsRestrictions : LPWSAQuerySet; const dwControlFlags : DWORD; lphLookup : PHANDLE ): Longint;  external WINSOCK2_DLL name 'WSALookupServiceBegin';
 
1249
function WSALookupServiceNextA( const hLookup : THandle; const dwControlFlags : DWORD; var lpdwBufferLength : DWORD; lpqsResults : LPWSAQuerySetA ): Longint;  external WINSOCK2_DLL name 'WSALookupServiceNextA';
 
1250
function WSALookupServiceNext( const hLookup : THandle; const dwControlFlags : DWORD; var lpdwBufferLength : DWORD; lpqsResults : LPWSAQuerySet ): Longint;  external WINSOCK2_DLL name 'WSALookupServiceNext';
 
1251
function WSAInstallServiceClassA( const lpServiceClassInfo : LPWSAServiceClassInfoA ) : Longint;  external WINSOCK2_DLL name 'WSAInstallServiceClassA';
 
1252
function WSAInstallServiceClassW( const lpServiceClassInfo : LPWSAServiceClassInfoW ) : Longint;  external WINSOCK2_DLL name 'WSAInstallServiceClassW';
 
1253
function WSAInstallServiceClass( const lpServiceClassInfo : LPWSAServiceClassInfo ) : Longint;  external WINSOCK2_DLL name 'WSAInstallServiceClass';
 
1254
function WSARemoveServiceClass( const lpServiceClassId : PGUID ) : Longint;  external WINSOCK2_DLL name 'WSARemoveServiceClass';
 
1255
function WSAGetServiceClassInfoA( const lpProviderId : PGUID; const lpServiceClassId : PGUID; var lpdwBufSize : DWORD;
 
1256
        lpServiceClassInfo : LPWSAServiceClassInfoA ): Longint;  external WINSOCK2_DLL name 'WSAGetServiceClassInfoA';
 
1257
function WSAGetServiceClassInfoW( const lpProviderId : PGUID; const lpServiceClassId : PGUID; var lpdwBufSize : DWORD;
 
1258
        lpServiceClassInfo : LPWSAServiceClassInfoW ): Longint;  external WINSOCK2_DLL name 'WSAGetServiceClassInfoW';
 
1259
function WSAGetServiceClassInfo( const lpProviderId : PGUID; const lpServiceClassId : PGUID; var lpdwBufSize : DWORD;
 
1260
        lpServiceClassInfo : LPWSAServiceClassInfo ): Longint;  external WINSOCK2_DLL name 'WSAGetServiceClassInfo';
 
1261
function WSAEnumNameSpaceProvidersA( var lpdwBufferLength: DWORD; const lpnspBuffer: LPWSANameSpace_InfoA ): Longint;  external WINSOCK2_DLL name 'WSAEnumNameSpaceProvidersA';
 
1262
function WSAEnumNameSpaceProviders( var lpdwBufferLength: DWORD; const lpnspBuffer: LPWSANameSpace_Info ): Longint;  external WINSOCK2_DLL name 'WSAEnumNameSpaceProviders';
 
1263
function WSAGetServiceClassNameByClassIdA( const lpServiceClassId: PGUID; lpszServiceClassName: PChar;
 
1264
        var lpdwBufferLength: DWORD ): Longint;  external WINSOCK2_DLL name 'WSAGetServiceClassNameByClassIdA';
 
1265
function WSAGetServiceClassNameByClassIdW( const lpServiceClassId: PGUID; lpszServiceClassName: PWideChar;
 
1266
        var lpdwBufferLength: DWORD ): Longint;  external WINSOCK2_DLL name 'WSAGetServiceClassNameByClassIdW';
 
1267
function WSAGetServiceClassNameByClassId( const lpServiceClassId: PGUID; lpszServiceClassName: PMBChar;
 
1268
        var lpdwBufferLength: DWORD ): Longint;  external WINSOCK2_DLL name 'WSAGetServiceClassNameByClassId';
 
1269
function WSASetServiceA( const lpqsRegInfo: LPWSAQuerySetA; const essoperation: TWSAeSetServiceOp;
 
1270
        const dwControlFlags: DWORD ): Longint;  external WINSOCK2_DLL name 'WSASetServiceA';
 
1271
function WSASetService( const lpqsRegInfo: LPWSAQuerySet; const essoperation: TWSAeSetServiceOp;
 
1272
        const dwControlFlags: DWORD ): Longint;  external WINSOCK2_DLL name 'WSASetService';
 
1273
//end win only
 
1274
{$endif not WINCE}
 
1275
 
 
1276
{$ifdef WINCE}
 
1277
//begin wince only or not present in current winsock2
 
1278
{
 
1279
                freeaddrinfo
 
1280
                getaddrinfo
 
1281
                getnameinfo
 
1282
                WSAAsyncGetAddrInfo
 
1283
                WSCDeinstallProvider
 
1284
                WSCEnumProtocols
 
1285
                WSCInstallNameSpace
 
1286
                WSCInstallProvider
 
1287
                WSCUnInstallNameSpace
 
1288
                in6addr_any
 
1289
                in6addr_loopback
 
1290
                sethostname
 
1291
 
 
1292
}
 
1293
//end wince only
 
1294
{$endif WINCE}
 
1295
 
 
1296
//=============================================================
 
1297
implementation
 
1298
//=============================================================
 
1299
 
 
1300
 
 
1301
function WSAMakeSyncReply(Buflen, Error: Word): Longint;
 
1302
begin
 
1303
  WSAMakeSyncReply:= MakeLong(Buflen, Error);
 
1304
end;
 
1305
 
 
1306
function WSAMakeSelectReply(Event, Error: Word): Longint;
 
1307
begin
 
1308
  WSAMakeSelectReply:= MakeLong(Event, Error);
 
1309
end;
 
1310
 
 
1311
function WSAGetAsyncBuflen(Param: Longint): Word;
 
1312
begin
 
1313
  WSAGetAsyncBuflen:= LOWORD(Param);
 
1314
end;
 
1315
 
 
1316
function WSAGetAsyncError(Param: Longint): Word;
 
1317
begin
 
1318
  WSAGetAsyncError:= HIWORD(Param);
 
1319
end;
 
1320
 
 
1321
function WSAGetSelectEvent(Param: Longint): Word;
 
1322
begin
 
1323
  WSAGetSelectEvent:= LOWORD(Param);
 
1324
end;
 
1325
 
 
1326
function WSAGetSelectError(Param: Longint): Word;
 
1327
begin
 
1328
  WSAGetSelectError:= HIWORD(Param);
 
1329
end;
 
1330
 
 
1331
procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet);
 
1332
var
 
1333
  I: cardinal;
 
1334
begin
 
1335
  I := 0;
 
1336
  while I < FDSet.fd_count do
 
1337
  begin
 
1338
    if FDSet.fd_array[I] = Socket then
 
1339
    begin
 
1340
      while I < FDSet.fd_count - 1 do
 
1341
      begin
 
1342
        FDSet.fd_array[I] := FDSet.fd_array[I + 1];
 
1343
        Inc(I);
 
1344
      end;
 
1345
      Dec(FDSet.fd_count);
 
1346
      Break;
 
1347
    end;
 
1348
    Inc(I);
 
1349
  end;
 
1350
end;
 
1351
 
 
1352
function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;
 
1353
begin
 
1354
  FD_ISSET := __WSAFDIsSet(Socket, FDSet);
 
1355
end;
 
1356
 
 
1357
procedure FD_SET(Socket: TSocket; var FDSet: TFDSet);
 
1358
begin
 
1359
  if FDSet.fd_count < FD_SETSIZE then
 
1360
  begin
 
1361
    FDSet.fd_array[FDSet.fd_count] := Socket;
 
1362
    Inc(FDSet.fd_count);
 
1363
  end;
 
1364
end;
 
1365
 
 
1366
procedure FD_ZERO(var FDSet: TFDSet);
 
1367
begin
 
1368
  FDSet.fd_count := 0;
 
1369
end;
 
1370
 
 
1371
 
 
1372
 
 
1373
end.