Hello SZ,

a tservice has a message pump, so possible he use this one:

   while not Terminated do
      ServiceThread.ProcessRequests(True);

---
Rgds, Wilfried [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
http://www.mestdagh.biz

Thursday, April 20, 2006, 16:01, Fastream Technologies wrote:

> Hello,

> Why don't you handle the exception in the message pump you create? For
> example:

> try
> {
>     while(GetMessage(...
>         DispatchMessage(...
> }
> catch(...)

> Regards,

> SubZ

> ----- Original Message ----- 
> From: "Shamresh Khan" <[EMAIL PROTECTED]>
> To: <twsocket@elists.org>
> Sent: Thursday, April 20, 2006 4:52 PM
> Subject: [twsocket] FTP Server in Service dying.


>> Hi to all,
>>
>> I have an FTPServer running within a Service. I have found that sometimes
>> my
>> service is killed.
>>
>> Although I have not been able to reproduce why this has happening, I have
>> found that in the IDE, if I set break points in the
>> FtpServerStorSessionConnecEvent and the
>> FtpServerStorSessionClosedEvent, 
>> the
>> client timeouts (5 second read timeout on each client command) I get the
>> access violation "Program error in ClientStorSessionClosed" being raised
>> which kills my service. I also saw this problem if I pull out the network
>> cable of the FTP server.
>>
>> The way my FTP client works is to try sending files and if there is an
>> error, it will try at a later time (few seconds later).
>>
>> Would it be possible for me to replace the line raise
>> Exception.Create('Program error in ClientStorSessionClosed'); below for
>> the
>> command Exit. Would this cause any other problems? This way the service
>> will
>> not die.
>>
>> procedure TFtpServer.ClientStorSessionClosed(Sender : TObject; AError  :
>> Word);
>> var
>>    Client      : TFtpCtrlSocket;
>>    Data        : TWSocket;
>> begin
>>    Data                     := TWSocket(Sender);
>>    Client                   := TFtpCtrlSocket(Data.Owner);
>> { !!!!!!!! NGB: Free Up Current Port - next 2 lines added }
>>    if Client.PassiveConnected and (FPasvPortRangeSize > 0) then
>>        FreeCurrentPasvPort(Client);
>> { !!!!!!!! NGB: previous 2 lines added }
>>
>>    Client.DataSessionActive := FALSE;
>>    Client.PassiveStart      := FALSE;
>>    Client.PassiveConnected  := FALSE;
>>    Client.RestartPos        := 0;
>>    { Reset data port to standard value }
>>    Client.DataPort          := 'ftp-data';
>>
>>    { If we had opened a data stream ourself, then close it }
>>    if Client.HasOpenedFile then begin
>>        if Assigned(Client.DataStream) then
>>            Client.DataStream.Destroy;
>>        Client.DataStream    := nil;
>>        Client.HasOpenedFile := FALSE;
>>    end;
>>
>>    TriggerStorSessionClosed(Client, Data, AError);
>>
>>    case Client.CurCmdType of
>>    ftpcSTOR :
>>        begin
>>            if Client.AbortingTransfer then
>>                SendAnswer(Client, Format(msgStorAborted,
>> [Client.TransferError]))
>>            else if AError = 0 then
>>                SendAnswer(Client, msgStorOk)
>>            else
>>                SendAnswer(Client, Format(msgStorError, [AError]));
>>        end;
>>    ftpcAPPE :
>>        begin
>>            if Client.AbortingTransfer then
>>                SendAnswer(Client, Format(msgAppeAborted,
>> [Client.TransferError]))
>>            else if AError = 0 then
>>                SendAnswer(Client, msgAppeOk)
>>            else
>>                SendAnswer(Client, Format(msgAppeError, [AError]));
>>        end;
>>    ftpcSTOU :
>>        begin
>>            if Client.AbortingTransfer then
>>                SendAnswer(Client, Format(msgStouAborted,
>> [Client.TransferError]))
>>            else if AError = 0 then
>>                SendAnswer(Client, Format (msgStouOk, [Client.FileName]))
>>            else
>>                SendAnswer(Client, Format(msgStouError, [AError]));
>>        end;
>>    else { Should never comes here }
>>      raise Exception.Create('Program error in ClientStorSessionClosed');
>>    end;
>> end;
>>
>> Regards
>> Sham.
>>
>>
>> -- 
>> To unsubscribe or change your settings for TWSocket mailing list
>> please goto http://www.elists.org/mailman/listinfo/twsocket
>> Visit our website at http://www.overbyte.be 


-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to