Difference between revisions of "Unit Winsock2"
Line 2,055: | Line 2,055: | ||
---- | ---- | ||
− | '' | + | |
+ | '''Winsock2 socket''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2Socket = class(TListObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Base Socket classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FBoundPort:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FBoundAddress:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FReuseAddress:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetFamily(AFamily:Integer); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetSocketType(ASocketType:Integer); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetProtocol(AProtocol:Integer); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetBoundPort(ABoundPort:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetBoundAddress(const ABoundAddress:String); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetReuseAddress(AReuseAddress:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetLocalPort:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetLocalHost:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetLocalAddress:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetLocalAddresses:TStrings;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetSendSize:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetSendSize(ASize:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetReceiveSize:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetReceiveSize(ASize:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetSendTimeout:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetSendTimeout(ATimeout:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetReceiveTimeout:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetReceiveTimeout(ATimeout:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetConnectTimeout:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetConnectTimeout(ATimeout:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>FHandle:TSocket;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FFamily:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FSocketType:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FProtocol:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FLastError:LongInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetBroadcastAddress:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AllocateFamily:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AllocateAddress(var ALength:Integer):PSockAddr;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseAddress(var ASockAddr:PSockAddr; var ALength:Integer):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AllocateBoundAddress(var ALength:Integer):PSockAddr;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AllocateSocket(ASocketType:Integer):TSocket;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Bind:LongInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SockAddrToPort(ASockAddr:PSockAddr; ALength:Integer):Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SockAddrToAddress(ASockAddr:PSockAddr; ALength:Integer):String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function PortToSockAddr(APort:Word; ASockAddr:PSockAddr; ALength:Integer):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function AddressToSockAddr(const AAddress:String; var ALength:Integer):PSockAddr;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Handle:TSocket read FHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Family:Integer read FFamily write SetFamily;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SocketType:Integer read FSocketType write SetSocketType;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Protocol:Integer read FProtocol write SetProtocol;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property LastError:LongInt read FLastError;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property BoundPort:Word read FBoundPort write SetBoundPort;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property BoundAddress:String read FBoundAddress write SetBoundAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property ReuseAddress:Boolean read FReuseAddress write SetReuseAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property LocalPort:Word read GetLocalPort;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property LocalHost:String read GetLocalHost;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property LocalAddress:String read GetLocalAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property LocalAddresses:TStrings read GetLocalAddresses;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property SendSize:Integer read GetSendSize write SetSendSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ReceiveSize:Integer read GetReceiveSize write SetReceiveSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SendTimeout:Integer read GetSendTimeout write SetSendTimeout;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ReceiveTimeout:Integer read GetReceiveTimeout write SetReceiveTimeout;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property ConnectTimeout:Integer read GetConnectTimeout write SetConnectTimeout;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Connected:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Shutdown:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Disconnect:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CloseSocket:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ResolveHost(const AHost:String):String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ResolveFamily(const AAddress:String):Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ResolveAddress(const AAddress:String):String;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ResolveHostEx(const AHost:String; AFamily:Integer; AAll:Boolean):TStrings;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 socket thread''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2SocketThread = class(TThreadEx)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FPrev:TWinsock2SocketThread;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>FNext:TWinsock2SocketThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Prev:TWinsock2SocketThread read FPrev write FPrev;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Next:TWinsock2SocketThread read FNext write FNext;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 socket threads''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2SocketThreads = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLock:TCriticalSectionHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FFirst:TWinsock2SocketThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FLast:TWinsock2SocketThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetFirst:TWinsock2SocketThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetLast:TWinsock2SocketThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Link(AValue:TWinsock2SocketThread):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function LinkEx(APrev,AValue:TWinsock2SocketThread):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Unlink(AValue:TWinsock2SocketThread):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Count:Integer read GetCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property First:TWinsock2SocketThread read GetFirst;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Last:TWinsock2SocketThread read GetLast;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Add(AValue:TWinsock2SocketThread):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Remove(AValue:TWinsock2SocketThread):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Insert(APrev,AValue:TWinsock2SocketThread):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Find(AValue:TWinsock2SocketThread):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure Clear; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 socket buffer''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2SocketBuffer = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FPrev:TWinsock2SocketBuffer;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>FNext:TWinsock2SocketBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Prev:TWinsock2SocketBuffer read FPrev write FPrev;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Next:TWinsock2SocketBuffer read FNext write FNext;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 socket buffers''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2SocketBuffers = class(TObject)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLock:TCriticalSectionHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FFirst:TWinsock2SocketBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FLast:TWinsock2SocketBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetFirst:TWinsock2SocketBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetLast:TWinsock2SocketBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Link(AValue:TWinsock2SocketBuffer):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function LinkEx(APrev,AValue:TWinsock2SocketBuffer):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Unlink(AValue:TWinsock2SocketBuffer):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Count:Integer read GetCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property First:TWinsock2SocketBuffer read GetFirst;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Last:TWinsock2SocketBuffer read GetLast;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Add(AValue:TWinsock2SocketBuffer):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Remove(AValue:TWinsock2SocketBuffer):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Insert(APrev,AValue:TWinsock2SocketBuffer):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Find(AValue:TWinsock2SocketBuffer):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure Clear; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 RAW socket''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2RAWSocket = class(TWinsock2Socket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Raw Socket (SOCK_RAW) classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FBufferSize:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FBroadcastEnabled:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetSocketType(ASocketType:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetProtocol(AProtocol:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetBufferSize(ABufferSize:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetBroadcastEnabled(ABroadcastEnabled:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function RecvFromSocket(ASockAddr:PSockAddr; ASockLen:PInteger; AData:Pointer; ASize:Integer; var ACount:Integer):LongInt; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SendToSocket(ASockAddr:PSockAddr; ASockLen:Integer; AData:Pointer; ASize:Integer; var ACount:Integer):LongInt; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecvFromSocketEx(AHandle:THandle; ASockAddr:PSockAddr; ASockLen:PInteger; AData:Pointer; ASize:Integer; var ACount:Integer; var AClosed:Boolean):LongInt; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SendToSocketEx(AHandle:THandle; ASockAddr:PSockAddr; ASockLen:Integer; AData:Pointer; ASize:Integer; var ACount:Integer):LongInt; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property BufferSize:Integer read FBufferSize write SetBufferSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property BroadcastEnabled:Boolean read FBroadcastEnabled write SetBroadcastEnabled;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecvData(AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SendData(AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function BroadcastData(AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecvDataFrom(var AHost:String; AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SendDataTo(const AHost:String; AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function BroadcastDataTo(const AAddress:String; AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 TCP socket''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2TCPSocket = class(TWinsock2Socket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Stream Socket (SOCK_STREAM) classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FUseNagle:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FUseKeepalive:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FSegmentSize:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FMaxSegmentSize:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetSocketType(ASocketType:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetProtocol(AProtocol:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetBacklog(ABacklog:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetUseNagle(AUseNagle:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetUseKeepalive(AUseKeepalive:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetSegmentSize(ASegmentSize:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetMaxSegmentSize(AMaxSegmentSize:LongWord);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>FBacklog:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Listen(ABacklog:Integer):LongInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadFromSocket(AData:Pointer; ASize:Integer):LongInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteToSocket(AData:Pointer; ASize:Integer):LongInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadFromSocketEx(AData:Pointer; ASize:Integer; var ACount:Integer; var AClosed:Boolean; AWait:Boolean; ATimeout:Integer):LongInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteToSocketEx(AData:Pointer; ASize:Integer; var ACount:Integer; AWait:Boolean; ATimeout:Integer):LongInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Backlog:Integer read FBacklog write SetBacklog;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property UseNagle:Boolean read FUseNagle write SetUseNagle;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UseKeepalive:Boolean read FUseKeepalive write SetUseKeepalive;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property SegmentSize:Integer read FSegmentSize write SetSegmentSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property MaxSegmentSize:LongWord read FMaxSegmentSize write SetMaxSegmentSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadData(AData:Pointer; ACount:Integer):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function WriteData(AData:Pointer; ACount:Integer):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function ReadAvailable(AData:Pointer; ASize:Integer; var ACount:Integer; var AClosed:Boolean):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP socket''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPSocket = class(TWinsock2Socket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Datagram Socket (SOCK_DGRAM) classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FBufferSize:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FBroadcastEnabled:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetSocketType(ASocketType:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetProtocol(AProtocol:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetBufferSize(ABufferSize:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetBroadcastEnabled(ABroadcastEnabled:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function RecvFromSocket(ASockAddr:PSockAddr; ASockLen:PInteger; AData:Pointer; ASize:Integer; var ACount:Integer):LongInt; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SendToSocket(ASockAddr:PSockAddr; ASockLen:Integer; AData:Pointer; ASize:Integer; var ACount:Integer):LongInt; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecvFromSocketEx(AHandle:THandle; ASockAddr:PSockAddr; ASockLen:PInteger; AData:Pointer; ASize:Integer; var ACount:Integer; var AClosed:Boolean):LongInt; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SendToSocketEx(AHandle:THandle; ASockAddr:PSockAddr; ASockLen:Integer; AData:Pointer; ASize:Integer; var ACount:Integer):LongInt; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property BufferSize:Integer read FBufferSize write SetBufferSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property BroadcastEnabled:Boolean read FBroadcastEnabled write SetBroadcastEnabled;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecvData(AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SendData(AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function BroadcastData(AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function RecvDataFrom(var AHost:String; var APort:Word; AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function SendDataTo(const AHost:String; APort:Word; AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function BroadcastDataTo(const AAddress:String; APort:Word; AData:Pointer; ACount:Integer):Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 RAW client''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2RAWClient = class(TWinsock2RAWSocket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Raw Client classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FUseConnect:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRemoteHost:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FRemoteAddress:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetUseConnect(AUseConnect:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetFamily(AFamily:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetBoundAddress(const ABoundAddress:String); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetRemoteHost(const ARemoteHost:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetRemoteAddress(const ARemoteAddress:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function AllocateFamily:Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AllocateRemoteAddress(var ALength:Integer):PSockAddr;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property UseConnect:Boolean read FUseConnect write SetUseConnect;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property RemoteHost:String read FRemoteHost write SetRemoteHost;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RemoteAddress:String read FRemoteAddress write SetRemoteAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Connect:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Disconnect:Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 TCP client''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2TCPClient = class(TWinsock2TCPSocket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Stream Client classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FRemotePort:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FRemoteHost:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FRemoteAddress:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetFamily(AFamily:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetBoundAddress(const ABoundAddress:String); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetRemotePort(ARemotePort:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetRemoteHost(const ARemoteHost:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetRemoteAddress(const ARemoteAddress:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function AllocateFamily:Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AllocateRemoteAddress(var ALength:Integer):PSockAddr;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property RemotePort:Word read FRemotePort write SetRemotePort;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RemoteHost:String read FRemoteHost write SetRemoteHost;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RemoteAddress:String read FRemoteAddress write SetRemoteAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Connect:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ConnectEx:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Disconnect:Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP client''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPClient = class(TWinsock2UDPSocket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Datagram Client classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FUseConnect:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FRemotePort:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FRemoteHost:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FRemoteAddress:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetUseConnect(AUseConnect:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetFamily(AFamily:Integer); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetBoundAddress(const ABoundAddress:String); override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetRemotePort(ARemotePort:Word);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetRemoteHost(const ARemoteHost:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetRemoteAddress(const ARemoteAddress:String);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>function AllocateFamily:Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AllocateRemoteAddress(var ALength:Integer):PSockAddr;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property UseConnect:Boolean read FUseConnect write SetUseConnect;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property RemotePort:Word read FRemotePort write SetRemotePort;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RemoteHost:String read FRemoteHost write SetRemoteHost;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property RemoteAddress:String read FRemoteAddress write SetRemoteAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Connect:Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Disconnect:Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 TCP server''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2TCPServer = class(TWinsock2TCPSocket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Stream Server classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(AListener:TWinsock2TCPListener);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FPeerPort:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FPeerAddress:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FListener:TWinsock2TCPListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetHandle(AHandle:TSocket); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetLastError(ALastError:LongInt); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property PeerPort:Word read FPeerPort;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property PeerAddress:String read FPeerAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Listener:TWinsock2TCPListener read FListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function Disconnect:Boolean; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 TCP server thread''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2TCPServerThread = class(TWinsock2SocketThread)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(AServer:TWinsock2TCPServer);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FData:TObject;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FServer:TWinsock2TCPServer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure AfterExecution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure BeforeExecution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Data:TObject read FData write FData;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Server:TWinsock2TCPServer read FServer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure Execution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 TCP listener thread''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2TCPListenerThread = class(TWinsock2SocketThread)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(AListener:TWinsock2TCPListener);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FListener:TWinsock2TCPListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure AfterExecution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure BeforeExecution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Listener:TWinsock2TCPListener read FListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure Execution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 TCP server threads''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2TCPServerThreads = class(TWinsock2SocketThreads)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>procedure TerminateThread(AThread:TWinsock2TCPServerThread);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>procedure TerminateAll;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Terminate(AThread:TWinsock2TCPServerThread):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 TCP listener''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2TCPListener = class(TWinsock2TCPSocket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FActive:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FThreads:TWinsock2TCPServerThreads;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FListenerThread:TWinsock2TCPListenerThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FOnExecute:TTCPExecuteEvent;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FOnConnect:TTCPConnectEvent;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FOnDisconnect:TTCPDisconnectEvent;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FOnCreateThread:TTCPCreateThreadEvent;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetActive(AActive:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetLastError(ALastError:LongInt); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure DoConnect(AThread:TWinsock2TCPServerThread); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure DoDisconnect(AThread:TWinsock2TCPServerThread); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function DoExecute(AThread:TWinsock2TCPServerThread):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Active:Boolean read FActive write SetActive;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Threads:TWinsock2TCPServerThreads read FThreads;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property OnExecute:TTCPExecuteEvent read FOnExecute write FOnExecute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property OnConnect:TTCPConnectEvent read FOnConnect write FOnConnect;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property OnDisconnect:TTCPDisconnectEvent read FOnDisconnect write FOnDisconnect;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property OnCreateThread:TTCPCreateThreadEvent read FOnCreateThread write FOnCreateThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP server''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPServer = class(TWinsock2UDPSocket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: Datagrams Server classes | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(AListener:TWinsock2UDPListener);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FPeerPort:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FPeerAddress:String;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FUseListener:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FListener:TWinsock2UDPListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetUseListener(AUseListener:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>FBuffer:TWinsock2UDPServerBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetData:Pointer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetSize:Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetCount:Integer; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetBuffer(ABuffer:TWinsock2UDPServerBuffer); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetLastError(ALastError:LongInt); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property PeerPort:Word read FPeerPort;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property PeerAddress:String read FPeerAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UseListener:Boolean read FUseListener write SetUseListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Listener:TWinsock2UDPListener read FListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Buffer:TWinsock2UDPServerBuffer read FBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property Data:Pointer read GetData;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Size:Integer read GetSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Count:Integer read GetCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SendData(AData:Pointer; ACount:Integer):Integer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SendDataTo(const AHost:String; APort:Word; AData:Pointer; ACount:Integer):Integer; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP server thread''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPServerThread = class(TWinsock2SocketThread)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(AServer:TWinsock2UDPServer);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLock:TCriticalSectionHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FActive:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FData:TObject;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FServer:TWinsock2UDPServer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetActive:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetActive(AActive:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure AfterExecution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure BeforeExecution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Active:Boolean read GetActive write SetActive;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Data:TObject read FData write FData;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Server:TWinsock2UDPServer read FServer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure Execution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP listener thread''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPListenerThread = class(TWinsock2SocketThread)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(AListener:TWinsock2UDPListener);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FListener:TWinsock2UDPListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure AfterExecution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure BeforeExecution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Listener:TWinsock2UDPListener read FListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure Execution; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP server threads''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPServerThreads = class(TWinsock2SocketThreads)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(AListener:TWinsock2UDPListener);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FMin:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FMax:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FListener:TWinsock2UDPListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetMin:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetMin(AMin:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetMax:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetMax(AMax:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure CreateThreads;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CreateThread(AForce:Boolean):TWinsock2UDPServerThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure TerminateThread(AThread:TWinsock2UDPServerThread);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Min:Integer read GetMin write SetMin;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Max:Integer read GetMax write SetMax;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetThread:TWinsock2UDPServerThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure ReleaseThread(AThread:TWinsock2UDPServerThread);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure TerminateAll;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Terminate(AThread:TWinsock2UDPServerThread):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP server buffer''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPServerBuffer = class(TWinsock2SocketBuffer)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(ASize:Integer);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLock:TCriticalSectionHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FActive:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FData:Pointer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FSize:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FCount:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetActive:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetActive(AActive:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetCount(ACount:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Active:Boolean read GetActive write SetActive;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Data:Pointer read FData;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Size:Integer read FSize;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Count:Integer read FCount write SetCount;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP server buffers''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPServerBuffers = class(TWinsock2SocketBuffers)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create(AListener:TWinsock2UDPListener);</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FMin:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FMax:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FListener:TWinsock2UDPListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetMin:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetMin(AMin:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function GetMax:Integer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetMax(AMax:Integer);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure CreateBuffers;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function CreateBuffer(AForce:Boolean):TWinsock2UDPServerBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure DeleteBuffer(ABuffer:TWinsock2UDPServerBuffer);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Min:Integer read GetMin write SetMin;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Max:Integer read GetMax write SetMax;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function GetBuffer:TWinsock2UDPServerBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure ReleaseBuffer(ABuffer:TWinsock2UDPServerBuffer);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure DeleteAll;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function Delete(ABuffer:TWinsock2UDPServerBuffer):Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Winsock2 UDP listener''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | |||
+ | <code>TWinsock2UDPListener = class(TWinsock2UDPSocket)</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>constructor Create;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>destructor Destroy; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | ||
+ | |- | ||
+ | | <code>FLock:TCriticalSectionHandle;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FActive:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FUseListener:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FThreads:TWinsock2UDPServerThreads;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FBuffers:TWinsock2UDPServerBuffers;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FListenerThread:TWinsock2UDPListenerThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>FOnExecute:TUDPExecuteEvent;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FOnCreateThread:TUDPCreateThreadEvent;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FOnCreateBuffer:TUDPCreateBufferEvent;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function AcquireLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>function ReleaseLock:Boolean;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>procedure SetActive(AActive:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>procedure SetUseListener(AUseListener:Boolean);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div> | ||
+ | |- | ||
+ | | <code>procedure SetLastError(ALastError:LongInt); virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function DoExecute(AThread:TWinsock2UDPServerThread):Boolean; virtual;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>function SendToSocketEx(AHandle:THandle; ASockAddr:PSockAddr; ASockLen:Integer; AData:Pointer; ASize:Integer; var ACount:Integer):LongInt; override;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div> | ||
+ | |- | ||
+ | | <code>property Active:Boolean read FActive write SetActive;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property UseListener:Boolean read FUseListener write SetUseListener;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Threads:TWinsock2UDPServerThreads read FThreads;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property Buffers:TWinsock2UDPServerBuffers read FBuffers;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>property OnExecute:TUDPExecuteEvent read FOnExecute write FOnExecute;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property OnCreateThread:TUDPCreateThreadEvent read FOnCreateThread write FOnCreateThread;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>property OnCreateBuffer:TUDPCreateBufferEvent read FOnCreateBuffer write FOnCreateBuffer;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
=== Public variables === | === Public variables === |
Revision as of 04:30, 23 March 2017
Return to Unit Reference
Contents
[hide]Description
Ultibo Winsock2 interface unit
Notes:
- All BSD/Winsock functions that accept an Address or Port expect them to be in Network order.
- All other functions that take an Address or Port expect them to be in Host order.
Constants
WINSOCK_*
IPPROTO_*
IPPORT_*
IP_*
SOCK_*
SO_*
TCP_*
UDP_*
AF_*
PF_*
MSG_*
FD_*
WSAE*
CF_*
SD_*
SG_*
PFL_*
XP1_*
JL_*
WSA_FLAG_*
IOC_*
SIO_*
NS_*
RES_*
SERVICE_TYPE_*
LUP_*
AI_*
NI_*
Type definitions
See globalsock.pas
Class definitions
Winsock2 socket
TWinsock2Socket = class(TListObject)
Winsock2 socket thread
TWinsock2SocketThread = class(TThreadEx)
Winsock2 socket threads
TWinsock2SocketThreads = class(TObject)
Winsock2 socket buffer
TWinsock2SocketBuffer = class(TObject)
Winsock2 socket buffers
TWinsock2SocketBuffers = class(TObject)
Winsock2 RAW socket
TWinsock2RAWSocket = class(TWinsock2Socket)
Winsock2 TCP socket
TWinsock2TCPSocket = class(TWinsock2Socket)
Winsock2 UDP socket
TWinsock2UDPSocket = class(TWinsock2Socket)
Winsock2 RAW client
TWinsock2RAWClient = class(TWinsock2RAWSocket)
Winsock2 TCP client
TWinsock2TCPClient = class(TWinsock2TCPSocket)
Winsock2 UDP client
TWinsock2UDPClient = class(TWinsock2UDPSocket)
Winsock2 TCP server
TWinsock2TCPServer = class(TWinsock2TCPSocket)
Winsock2 TCP server thread
TWinsock2TCPServerThread = class(TWinsock2SocketThread)
Winsock2 TCP listener thread
TWinsock2TCPListenerThread = class(TWinsock2SocketThread)
Winsock2 TCP server threads
TWinsock2TCPServerThreads = class(TWinsock2SocketThreads)
Winsock2 TCP listener
TWinsock2TCPListener = class(TWinsock2TCPSocket)
Winsock2 UDP server
TWinsock2UDPServer = class(TWinsock2UDPSocket)
Winsock2 UDP server thread
TWinsock2UDPServerThread = class(TWinsock2SocketThread)
Winsock2 UDP listener thread
TWinsock2UDPListenerThread = class(TWinsock2SocketThread)
Winsock2 UDP server threads
TWinsock2UDPServerThreads = class(TWinsock2SocketThreads)
Winsock2 UDP server buffer
TWinsock2UDPServerBuffer = class(TWinsock2SocketBuffer)
Winsock2 UDP server buffers
TWinsock2UDPServerBuffers = class(TWinsock2SocketBuffers)
Winsock2 UDP listener
TWinsock2UDPListener = class(TWinsock2UDPSocket)
Public variables
None defined
Function declarations
Initialization functions
Winsock2 functions
function accept( const s: TSocket; addr: PSockAddr; addrlen: PLongint ): TSocket;
function accept( const s: TSocket; addr: PSockAddr; var addrlen: Longint ): TSocket;
function bind( const s: TSocket; addr: PSockAddr; namelen: Longint ): Longint;
function bind( const s: TSocket; var addr: TSockAddr; namelen: Longint ): Longint;
function connect( const s: TSocket; name: PSockAddr; namelen: Longint): Longint;
function connect( const s: TSocket; var name: TSockAddr; namelen: Longint): Longint;
function ioctlsocket( const s: TSocket; cmd: Longint; var arg: u_long ): Longint;
function ioctlsocket( const s: TSocket; cmd: Longint; argp: pu_long ): Longint;
function getpeername( const s: TSocket; var name: TSockAddr; var namelen: Longint ): Longint;
function getsockname( const s: TSocket; var name: TSockAddr; var namelen: Longint ): Longint;
function getsockopt( const s: TSocket; const level, optname: Longint; optval: PChar; var optlen: Longint ): Longint;
function getsockopt( const s: TSocket; const level, optname: Longint; optval: Pointer; var optlen: Longint ): Longint;
function getsockopt( const s: TSocket; const level, optname: Longint; var optval; var optlen: Longint ): Longint;
function recv(s: TSocket; var Buf; len, flags: Longint): Longint;
function recv(s: TSocket; Buf: PChar; len, flags: Longint): Longint;
function recv(s: TSocket; Buf: Pointer; len, flags: Longint): Longint;
function recvfrom(s: TSocket; Buf: PChar; len, flags: Longint; from: PSockAddr; fromlen: PLongint): Longint;
function recvfrom(s: TSocket; Buf: Pointer; len, flags: Longint; from: PSockAddr; fromlen: PLongint): Longint;
function recvfrom(s: TSocket; var Buf; len, flags: Longint; var from: TSockAddr; var fromlen: Longint): Longint;
function select(nfds: Longint; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint;
function send(s: TSocket; var Buf; len, flags: Longint): Longint;
function send(s: TSocket; Buf: PChar; len, flags: Longint): Longint;
function send(s: TSocket; Buf: Pointer; len, flags: Longint): Longint;
function sendto(s: TSocket; var Buf; len, flags: Longint; var addrto: TSockAddr; tolen: Longint): Longint;
function sendto(s: TSocket; Buf: PChar; len, flags: Longint; addrto: PSockAddr; tolen: Longint): Longint;
function sendto(s: TSocket; Buf: Pointer; len, flags: Longint; addrto: PSockAddr; tolen: Longint): Longint;
function setsockopt(s: TSocket; level, optname: Longint; const optval; optlen: Longint): Longint;
function setsockopt(s: TSocket; level, optname: Longint; optval: PChar; optlen: Longint): Longint;
function setsockopt(s: TSocket; level, optname: Longint; optval: Pointer; optlen: Longint): Longint;
function gethostbyaddr(addr: Pointer; len, family: Longint): PHostEnt;
function getservbyport(port: Longint; proto: PChar): PServEnt;
function getaddrinfo(pNodeName, pServiceName: PChar; pHints: PAddrInfo; var ppResult: PAddrInfo): LongInt;
function getnameinfo(sa: PSockAddr; salen: Integer; host: PChar; hostlen: DWORD; serv: PChar; servlen: DWORD; flags: Integer): Integer;
function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Longint;
function inet_pton(Family: Longint; pszAddrString: PChar; pAddrBuf: Pointer): Longint;
function InetPtonA(Family: Longint; pszAddrString: PChar; pAddrBuf: Pointer): Longint;
function InetPtonW(Family: Longint; pszAddrString: PWideChar; pAddrBuf: Pointer): Longint;
function inet_ntop(Family: Longint; pAddr: Pointer; pStringBuf: PChar; StringBufSize: Longint): PChar;
function InetNtopA(Family: Longint; pAddr: Pointer; pStringBuf: PChar; StringBufSize: Longint): PChar;
function InetNtopW(Family: Longint; pAddr: Pointer; pStringBuf: PWideChar; StringBufSize: Longint): PWideChar;
function WSAhtonl( s : TSocket; hostlong : u_long; var lpnetlong : DWORD ): Longint;
function WSAhtons( s : TSocket; hostshort : u_short; var lpnetshort : WORD ): Longint;
function WSANtohl( s : TSocket; netlong : u_long; var lphostlong : DWORD ): Longint;
function WSANtohs( s : TSocket; netshort : u_short; var lphostshort : WORD ): Longint;
function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean;
Winsock2 undocumented functions
function WsControl(Proto:DWORD; Action:DWORD; pRequestInfo:Pointer; var pcbRequestInfoLen:DWORD; pResponseInfo:Pointer; var pcbResponseInfoLen:DWORD):Integer;
function getnetbyaddr(addr: Pointer; len, Struct: Integer): PNetEnt;
Winsock2 enhanced functions
function WsControlEx(Proto:DWORD; Action:DWORD; pRequestInfo:Pointer; var pcbRequestInfoLen:DWORD; pResponseInfo:Pointer; var pcbResponseInfoLen:DWORD):Integer;
Return to Unit Reference