[fpc-pascal]ssockets

md md at realmwireless.com
Sat Nov 4 20:15:17 CET 2000


You will need to interface directly to Win32 - May I suggest looking at
Winsock 2.

The attached file is some of the WIN32 interface to Winsock 2.  The
standard winsock.pas stuff will handle the rest.

Mark
Atlanta, GA


Mirek a Marcela wrote:
> 
> Hello,
> 
>     I've not found st similar to ssockets.pp for Win32. Does it exist?
> 
> Mirek Novak
> 
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
-------------- next part --------------
unit sockbt20;

//Copyright Mark Diener 1996 All rights reserved

interface

uses windows,winsock ;

const
 MSG_INTERRUPT   = $10 ;
 MSG_MAXIOVLEN   = 16 ;
 MAXGETHOSTSTRUCT = 1024 ;

 FD_READ_BIT  =    0 ;
 FD2_READ      =    1 shl FD_READ_BIT ;

 FD_WRITE_BIT  =   1 ;
 FD2_WRITE       =  1 shl FD_WRITE_BIT ;

 FD_OOB_BIT       = 2 ;
 FD2_OOB           = 1 shl FD_OOB_BIT ;

 FD_ACCEPT_BIT    = 3 ;
 FD2_ACCEPT        = 1 shl FD_ACCEPT_BIT ;

 FD_CONNECT_BIT   = 4 ;
 FD2_CONNECT       = 1 shl FD_CONNECT_BIT ;

 FD_CLOSE_BIT     = 5 ;
 FD2_CLOSE         = 1 shl FD_CLOSE_BIT ;

 FD_QOS_BIT       = 6 ;
 FD2_QOS           = 1 shl FD_QOS_BIT ;

 FD_GROUP_QOS_BIT = 7 ;
 FD2_GROUP_QOS     = 1 shl FD_GROUP_QOS_BIT  ;

 FD_MAX_EVENTS    = 8 ;
 FD2_ALL_EVENTS    = (1 shl FD_MAX_EVENTS)-1 ;

//typedef struct   _OVERLAPPED *    LPWSAOVERLAPPED;

 WSA_IO_PENDING          = (ERROR_IO_PENDING) ;
 WSA_IO_INCOMPLETE       = (ERROR_IO_INCOMPLETE) ;
 WSA_INVALID_HANDLE      = (ERROR_INVALID_HANDLE) ;
 WSA_INVALID_PARAMETER   = (ERROR_INVALID_PARAMETER);
 WSA_NOT_ENOUGH_MEMORY   = (ERROR_NOT_ENOUGH_MEMORY);
 WSA_OPERATION_ABORTED   = (ERROR_OPERATION_ABORTED);

 WSA_MAXIMUM_WAIT_EVENTS = (MAXIMUM_WAIT_OBJECTS) ;
 WSA_WAIT_FAILED         =  -1 ;
 WSA_WAIT_EVENT_0        = (WAIT_OBJECT_0) ;
 WSA_WAIT_IO_COMPLETION  = (WAIT_IO_COMPLETION) ;
 WSA_WAIT_TIMEOUT        = (WAIT_TIMEOUT) ;
 WSA_INFINITE            = (INFINITE) ;

 CF_ACCEPT     = $0000 ;
 CF_REJECT     = $0001 ;
 CF_DEFER      = $0002 ;
 SD_RECEIVE    = $00 ;
 SD_SEND       = $01 ;
 SD_BOTH       = $02 ;

 SG_UNCONSTRAINED_GROUP  = $01 ;
 SG_CONSTRAINED_GROUP    = $02 ;

type

TSOCKETGROUP = integer ;

TWSABUF = packed record
 len : LongInt ;
 buf : Pchar ;
end;

Tguarantee =(
 etBestEffortService,
 etControlledLoadService,
 etPredictiveService,
 etGuaranteedDelayService,
 etGuaranteedService) ;

PFlowspec = ^TFlowspec ;
TFlowspec = packed record
 TokenRate :integer ;              //* In Bytes/sec */
 TokenBucketSize :integer;        //* In Bytes */
 PeakBandwidth :integer;          //* In Bytes/sec */
 Latency :integer;                //* In microseconds */
 DelayVariation :integer;         //* In microseconds */
 Guaranteelevel : Integer ;
 CostOfCall : Integer;             //* Reserved for future use, */
 NetworkAvailability : Integer;    //* read-only:         */
end;

TQualityOfService = packed record
 SendingFlowspec : TFlowSpec;
 ReceivingFlowspec : TFlowSpec;
 ProviderSpecific : TWSABuf ;      //* additional provider specific stuff */
end;

// WSAAPI           =       FAR PASCAL
 WSAEVENT         =       integer ;
 LPWSAEVENT       =       ^THANDLE ;
// WSAOVERLAPPED    =       OVERLAPPED ;

PTWSAEVENTS = ^PTWSAEVENTS ;

TWSAEVENTS = record
 whatEvent : longint ;
 errcodes : array[0..FD_MAX_EVENTS] of integer;
end;

type
 Twsafptrenum = function(sock : Tsocket; netobj : THandle; evts : PTWSAEVENTS):integer ; stdcall ;
 Twsafptrevent = function(sock : Tsocket; netobj : THandle; flags :longint) :integer ; stdcall ;
 Twsatrysect = function(var lpCriticalSection: TRTLCriticalSection): BOOL; stdcall;

//function WSAEnumNetworkEvents(sock : Tsocket; netobj : THandle; evts : PTWSAEVENTS):integer ; stdcall ;
//function WSAEventSelect(sock : Tsocket; netobj : THandle; flags :longint) :integer ; stdcall ;

implementation

//We will explicitly load these function if we are not running WIN95
//function WSAEnumNetworkEvents;        external     'WS2_32.DLL' name 'WSAEnumNetworkEvents';
//function WSAEventSelect;        external     'WS2_32.DLL' name 'WSAEventSelect';

initialization


end.


More information about the fpc-pascal mailing list