IdServerIOHandlerSocket.pas 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. { $HDR$}
  2. {**********************************************************************}
  3. { Unit archived using Team Coherence }
  4. { Team Coherence is Copyright 2002 by Quality Software Components }
  5. { }
  6. { For further information / comments, visit our WEB site at }
  7. { http://www.TeamCoherence.com }
  8. {**********************************************************************}
  9. {}
  10. { $Log: 10319: IdServerIOHandlerSocket.pas
  11. {
  12. { Rev 1.0 2002.11.12 10:51:18 PM czhower
  13. }
  14. unit IdServerIOHandlerSocket;
  15. interface
  16. Uses
  17. SysUtils, IdGlobal, IdThread, IdServerIOHandler, IdStackConsts, IdIOHandler, IdIOHandlerSocket;
  18. type
  19. TIdServerIOHandlerSocket = class(TIdServerIOHandler)
  20. public
  21. procedure Init; override;
  22. function Accept(ASocket: TIdStackSocketHandle;
  23. AThread: TIdThread = nil): TIdIOHandler; override;
  24. end;
  25. implementation
  26. uses Classes;
  27. { TIdServerIOHandlerSocket }
  28. procedure TIdServerIOHandlerSocket.Init;
  29. begin
  30. //
  31. end;
  32. function TIdServerIOHandlerSocket.Accept(ASocket: TIdStackSocketHandle;
  33. AThread: TIdThread = nil): TIdIOHandler;
  34. Var
  35. LIOHandler: TIdIOHandlerSocket;
  36. begin
  37. LIOHandler := TIdIOHandlerSocket.Create(nil);
  38. LIOHandler.Open;
  39. Result := nil;
  40. if Assigned(AThread) then begin
  41. while not AThread.Stopped do begin
  42. if LIOHandler.Binding.Select(ASocket, 100) then begin // Wait for 100 ms
  43. if LIOHandler.Binding.Accept(ASocket) then begin
  44. Result := LIOHandler;
  45. EXIT;
  46. end else begin
  47. FreeAndNil(LIOHandler);
  48. EXIT;
  49. end;//if Accept
  50. end;//if select
  51. end;
  52. if AThread.Stopped then begin
  53. FreeAndNil(LIOHandler);
  54. end;
  55. end
  56. // Old way for compatibility
  57. else begin
  58. if LIOHandler.Binding.Accept(ASocket) then begin
  59. Result := LIOHandler;
  60. Exit;
  61. end else begin
  62. FreeAndNil(LIOHandler);
  63. end;
  64. end;
  65. end;
  66. end.