Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой IndyTelnetServer, проблемка с отключением 
:(
    Опции темы
Mysterio
Дата 30.1.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Планирующий
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.12.2004

Репутация: нет
Всего: нет



При выполнении процедуры отключения клиентов от сервера IdTelnetServer остаются какие-то фантомы в списке, с IP-адресом 0, в счетчике потоков IdTelnetServer1->ThreadMgr->ActiveThreads->Count фигурируют. 
Соорудил простенький пример, который и цепляю ниже (зайти в telnet.exe, подключиться двумя-тремя клиентами и нажать "Выкинуть всех", остаются фантомы).

Вот то, что написано в функции на кнопке "Выкинуть":

Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  __try
  {
   TList * lst = IdTelnetServer1->Threads->LockList();
   for(int i=0;i<lst->Count;i++)
   {
    TIdPeerThread * ptr = (TIdPeerThread *)lst->Items[i];


    ptr->Connection->Disconnect();
    ptr->Stop();

   }
  }
    __finally
  {
    IdTelnetServer1->Threads->UnlockList();
  }

}




Надеюсь, компоненты Indy тут ни при чем, и ошибка в коде.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  exp.zip 5,25 Kb
PM MAIL   Вверх
dumb
Дата 31.1.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Mysterio, в индейских серверных компонентах реализован пул потоков для обработки входящих соединений, так что это не баг, это - фича. и в большинстве случаев влезать в эту "кухню" смысла не имеет.
PM MAIL   Вверх
Mysterio
Дата 31.1.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Планирующий
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.12.2004

Репутация: нет
Всего: нет



Хорошо, но как тогда достоверно определять, сколько же клиентов соединилось? Вручную выколупывать из TList'a ненулевые IP?






Попробовал все-таки влезть в "кухню". Результат или тот же, или хуже:

- попробовал на кнопке "выкинуть всех" повесить IdTelnetServer1->ThreadMgr->TerminateThreads(lst), lst получаю все так же, с помощью LockList(). Приложение полностью зависло.

- попробовал соседнюю ф-цию ReleaseThread(ptr) для одного потока. Приложение полностью зависло.

- добавил компонент IdThreadMgrPool, в свойстве сервера ThreadMgr выбрал его. У IdThreadMgrPool1 свойство PoolSize = 0. После запуска программы ничего не изменилось, остаются фантомы.

- попробовал взять список через добавленный компонент пула, IdThreadMgrPool1->ActiveThreads. Он тоже возвращает *TList. Список получился аналогичный IdTelnetServer1->Threads->LockList(). С теми же фантомами.

- IdThreadMgrPool1->TerminateThreads(lst) тоже подвешивает приложение.

Это сообщение отредактировал(а) Mysterio - 4.2.2009, 09:40
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.