Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Вниз

Ошибка EIdClosedSocket (Indy) при завершении соединения   Найти похожие ветки 

 
Tor ©   (2007-05-22 18:27) [0]

Всем пис!

Люди добрые, подскажите как избавиться от назойлевой ошибки EIdClosedSocket которая вылетает после того как я выключаю TCP сервер. Причем ошибка появляется только если запущена прога из под делфи.
Вот пример кода завершения соединения:

...
   if Command <> 0 then
   begin
     FClose := true; // Флаг что прога может быть завершена
     with DM.ClientList do
     begin
       for I := 0 to Count - 1 do
         if not (TClient(Items[I]).State in [csPayment, csService]) then
         begin
           DM.SendCommand(TClient(Items[I]).ClientThread, Command, ""); // Отправка комманды клиенту, например на перезагрузку или выключение
         end;
     end;
     DM.TCPServer.Active := false; // после этой строки и выскакивает EIdClosedSocket
     CanClose := true;
   end;


А вот событие OnExecute, возможно именно сдесь вылетает этот эрор:

procedure TDM.TCPServerExecute(AThread: TIdPeerThread);
var
 Client: TClient;
 ReciveBlock: TReciveBlock;
 Readed: Boolean;
begin
 if FClose then Exit;
 Readed := false;
 Client := ClientByIP(AThread.Connection.Socket.Binding.PeerIP);

 if (not AThread.Terminated) and (AThread.Connection.Connected) and (Assigned(Client)) then
   try
//      AThread.Connection.CheckForDisconnect(true, true);
     AThread.Connection.ReadBuffer(ReciveBlock, SizeOf(ReciveBlock));
     Readed := true;
   except
     on EIdReadTimeout do ;
     on EIdClosedSocket do ;
     on EIdException do
     begin
       AThread.Connection.Disconnect;
       Client.Refresh(csDisconnect);
     end;
   end;
 if Readed then
 begin
   Client.IncTraffic := ReciveBlock.IncTraffic;
   Client.OutTraffic := ReciveBlock.OutTraffic;
 end;
end;


А может появление этой ошибки из дебагера вполне нормальное явление? :)


 
Сергей М. ©   (2007-05-23 08:24) [1]

Tools -> Debugger Options .. -> Language exceptions
Stop on Delphi Exceptions = False


 
Tor ©   (2007-05-23 10:07) [2]

Это не есть выход из положения. Хотелось бы найти место где происходит чтение или запись в буфер соединения в результате чего выскакивает эта ошибка.


 
Сергей М. ©   (2007-05-23 10:25) [3]

А что его искать ?
Ошибка возникает не иначе как при выполнении read- или write-метода объекта Connection.


 
DVM ©   (2007-05-23 10:29) [4]


> чего выскакивает эта ошибка.

Это не ошибка, это исключение. Исключения <> ошибки.


 
DVM ©   (2007-05-23 10:30) [5]


> Это не есть выход из положения.

Выход ты уже придумал try...except

А то что дебаггер реагирует на исключения - можно отклюяить как тебе написали.


 
umbra ©   (2007-05-23 10:40) [6]


>    DM.SendCommand(TClient(Items[I]).ClientThread, Command,
>  ""); // Отправка комманды клиенту, например на перезагрузку
> или выключение

если в результате этого клиенты сами закрывают соединение, то при

> DM.TCPServer.Active := false;

сервер пытается читать из соединения и, естественно, возникает ошибка. Вообще, неправильно, когда сервер отправляет команды клиенту. Он должен на них только отвечать.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.059 c
8-1173015027
ы
2007-03-04 16:30
2008.02.03
ошибка


2-1199558731
Riply
2008-01-05 21:45
2008.02.03
Разница в вызове функций


1-1193245690
Silver...
2007-10-24 21:08
2008.02.03
написать Текст поверх ВСЕХ компонентов на форме


2-1199977243
Nil
2008-01-10 18:00
2008.02.03
Application.ShowMainForm := False; и TFrame


9-1166419019
cvxzcv1231
2006-12-18 08:16
2008.02.03
Шрифт в DelphiX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский