idserveriohandlersocket.pas
来自「indy的原文件哈!大家可以下来参考和学习之用.也可以用以作组件.开发其他的应用」· PAS 代码 · 共 77 行
PAS
77 行
{ $HDR$}
{**********************************************************************}
{ Unit archived using Team Coherence }
{ Team Coherence is Copyright 2002 by Quality Software Components }
{ }
{ For further information / comments, visit our WEB site at }
{ http://www.TeamCoherence.com }
{**********************************************************************}
{}
{ $Log: 10319: IdServerIOHandlerSocket.pas
{
{ Rev 1.0 2002.11.12 10:51:18 PM czhower
}
unit IdServerIOHandlerSocket;
interface
Uses
SysUtils, IdGlobal, IdThread, IdServerIOHandler, IdStackConsts, IdIOHandler, IdIOHandlerSocket;
type
TIdServerIOHandlerSocket = class(TIdServerIOHandler)
public
procedure Init; override;
function Accept(ASocket: TIdStackSocketHandle;
AThread: TIdThread = nil): TIdIOHandler; override;
end;
implementation
uses Classes;
{ TIdServerIOHandlerSocket }
procedure TIdServerIOHandlerSocket.Init;
begin
//
end;
function TIdServerIOHandlerSocket.Accept(ASocket: TIdStackSocketHandle;
AThread: TIdThread = nil): TIdIOHandler;
Var
LIOHandler: TIdIOHandlerSocket;
begin
LIOHandler := TIdIOHandlerSocket.Create(nil);
LIOHandler.Open;
Result := nil;
if Assigned(AThread) then begin
while not AThread.Stopped do begin
if LIOHandler.Binding.Select(ASocket, 100) then begin // Wait for 100 ms
if LIOHandler.Binding.Accept(ASocket) then begin
Result := LIOHandler;
EXIT;
end else begin
FreeAndNil(LIOHandler);
EXIT;
end;//if Accept
end;//if select
end;
if AThread.Stopped then begin
FreeAndNil(LIOHandler);
end;
end
// Old way for compatibility
else begin
if LIOHandler.Binding.Accept(ASocket) then begin
Result := LIOHandler;
Exit;
end else begin
FreeAndNil(LIOHandler);
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?