| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- {
- $Project$
- $Workfile$
- $Revision$
- $DateUTC$
- $Id$
- This file is part of the Indy (Internet Direct) project, and is offered
- under the dual-licensing agreement described on the Indy website.
- (http://www.indyproject.org/)
- Copyright:
- (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
- }
- {
- $Log$
- }
- {
- Rev 1.16 23.3.2005 ã. 20:52:00 DBondzhev
- LIOHandler is not released if exception is thrown while listening for
- incomming connection.
- Rev 1.15 2004.02.03 4:17:04 PM czhower
- For unit name changes.
- Rev 1.14 2004.01.20 10:03:32 PM czhower
- InitComponent
- Rev 1.13 2003.10.11 5:50:00 PM czhower
- -VCL fixes for servers
- -Chain suport for servers (Super core)
- -Scheduler upgrades
- -Full yarn support
- Rev 1.12 10/5/2003 03:03:58 AM JPMugaas
- Should compile.
- Rev 1.11 2003.09.19 10:11:20 PM czhower
- Next stage of fiber support in servers.
- Rev 1.10 2003.09.19 11:54:34 AM czhower
- -Completed more features necessary for servers
- -Fixed some bugs
- Rev 1.9 2003.09.18 4:10:28 PM czhower
- Preliminary changes for Yarn support.
- Rev 1.8 2003.07.14 10:15:36 PM czhower
- Changed timeout to 250 from 100
- Rev 1.7 3/29/2003 5:55:02 PM BGooijen
- now calls AfterAccept
- Rev 1.6 3/13/2003 10:18:28 AM BGooijen
- Server side fibers, bug fixes
- Rev 1.5 1-17-2003 22:22:04 BGooijen
- new design
- Rev 1.4 1-1-2003 16:28:26 BGooijen
- Changed TIdThread to TIdYarn
- Rev 1.3 12-7-2002 17:02:32 BGooijen
- Now creates IOHandlerSockets of class IOHandlerSocketClass.
- This is more flexible for descendants
- Rev 1.2 12-7-2002 12:34:38 BGooijen
- Re-enabled IPv6 support
- Rev 1.1 05/12/2002 15:32:00 AO'Neill
- Rev 1.0 12/2/2002 05:01:30 PM JPMugaas
- Rechecked in due to file corruption.
- }
- unit IdServerIOHandlerSocket;
- interface
- {$i IdCompilerDefines.inc}
- uses
- IdSocketHandle, IdGlobal, IdThread, IdServerIOHandler, IdIOHandler,
- IdIOHandlerSocket, IdYarn;
- type
- TIdIOHandlerSocketClass = class of TIdIOHandlerSocket;
- TIdServerIOHandlerSocket = class(TIdServerIOHandler)
- protected
- IOHandlerSocketClass: TIdIOHandlerSocketClass;
- //
- procedure InitComponent; override;
- public
- function Accept(
- ASocket: TIdSocketHandle;
- AListenerThread: TIdThread;
- AYarn: TIdYarn
- ): TIdIOHandler;
- override;
- procedure Init; override;
- end;
- implementation
- uses SysUtils;
- { TIdServerIOHandlerSocket }
- procedure TIdServerIOHandlerSocket.Init;
- begin
- //
- end;
- function TIdServerIOHandlerSocket.Accept(
- ASocket: TIdSocketHandle;
- AListenerThread: TIdThread;
- AYarn: TIdYarn
- ): TIdIOHandler;
- var
- LIOHandler: TIdIOHandlerSocket;
- begin
- //using a custom scheduler, AYarn may be nil, so don't assert
- Assert(ASocket<>nil);
- Assert(AListenerThread<>nil);
- Result := nil;
- LIOHandler := IOHandlerSocketClass.Create(nil);
- try
- LIOHandler.Open;
- while not AListenerThread.Stopped do begin
- if ASocket.Select(250) then begin
- if (not AListenerThread.Stopped) and LIOHandler.Binding.Accept(ASocket.Handle) then begin
- LIOHandler.AfterAccept;
- Result := LIOHandler;
- LIOHandler := nil;
- Break;
- end;
- end;
- end;
- finally
- FreeAndNil(LIOHandler);
- end;
- end;
- procedure TIdServerIOHandlerSocket.InitComponent;
- begin
- inherited InitComponent;
- IOHandlerSocketClass := TIdIOHandlerSocket;
- end;
- end.
|