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