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