Показать сообщение отдельно
  #1  
Старый 09.03.2013, 18:39
Nanotentacle Nanotentacle вне форума
Прохожий
 
Регистрация: 09.03.2013
Сообщения: 3
Репутация: 10
По умолчанию Ошибка при отправке сообщений

Добрый день, уважаемые форумчане.
Возникла такая проблема: в программе используется TServerSocket в режиме stNonBlocking, принимает сообщения и отправляет их в ответ. Также имеется процедура, которая циклично через Server.Socket.Connections[i].SendText отправляет данные клиентам:
Код:
procedure TGProcessing.Multicast(st: String; exceptClient: TGLNumber);
var i:Byte; temp:integer;
begin
if self.Count <= 0 then Exit;
 temp := 0;
 if length(st) > 0 then
 begin
  for i := 0 to self.Server.Socket.ActiveConnections - 1 do
  begin
   if self.Client[exceptClient].SocketHandle <> self.Server.Socket.Connections[i].Handle then
   temp := temp + self.Server.Socket.Connections[i].SendText(st);
  end;
 end;
 self.FSend := self.FSend + temp;
end;

В момент, если происходит отключение клиента, постоянно вываливается ошибка. Ошибка вываливается при обращении к self.Client в различных частях программы, но, как удалось установить, причина именно в отключении клиента. Сам экземпляр Client не удаляется, а уходит в пул, поэтому он заведомо существует. Даже если его не существует, везде стоят проверки if assigned (Client) then.

Поэтому возникают три вопроса:
1) почему возникает подобная ошибка?
2) как ее можно избежать?
3) поможет ли режим stThreadBlocking для решения проблемы? Пока что не берусь переписывать код, вдруг кто-то встречался с подобным, а делать теоретически бесполезную работу не хочется, не будучи уверенным.

Спасибо за ответы.
Ответить с цитированием