Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.03;
Скачать: CL | DM;

Вниз

Ошибка 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;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.043 c
2-1200113814
Farel
2008-01-12 07:56
2008.02.03
MSWord


2-1199938728
hero
2008-01-10 07:18
2008.02.03
Помогите отсортировать ListView не по caption


15-1199134770
Kerk
2007-12-31 23:59
2008.02.03
Фигня какая-то с раскладкой


15-1198361045
linkomizin
2007-12-23 01:04
2008.02.03
нужно к 24.12.07..


15-1199182043
palva
2008-01-01 13:07
2008.02.03
Директива #import Borland C++ 5.5.1





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский