Форум: "Сети";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизОткрытые порты! Трабл!!! Найти похожие ветки
← →
csr © (2004-02-19 15:52) [0]Есть многопоточная программа, работает на TidHTTP. После вызова TerminateThread винапи, сетевая активность прекращается, потоки умирают, но файервол показывает что несколько портов (HTTP) остаются открытыми. И были открыты они моей прогой. Вопрос: как закрыть открытые порты? Очень важно! Спсибо!!!
← →
Verg © (2004-02-19 16:28) [1]
> Вопрос: как закрыть открытые порты?
1. Не открывать их
2. Не использовать TerminateThread
А дополнительные мои соображения по этому вопросу можно почитат здесь:
http://delphimaster.net/view/6-1077183962/
← →
Digitman © (2004-02-19 17:16) [2]рискну "потелепатить")
автор стартует поток и пытается в его контексте запросить гипертекст упомянутыми (блокирующими !) ср-вами ..
не дождавшись по каким-то причинам исполнения запроса (мало ли оных м.б.), автор ничтоже сумняшеся "лупит" потоку "по мозгам" вызовом TerminateThread, ибо при блокир.вызове иных способов "укротить" трэд явно нет ...
так ?
← →
Digitman © (2004-02-19 17:18) [3]
> несколько портов (HTTP) остаются открытыми. И были открыты
> они моей прогой
и в этом никакого нонсенса нет - ты, "долбанув" по потоку TerminateThread"ом (хоть и грубо, но иначе не назовешь), потерял занятые им ресурсы !
"Уж сколько раз твердили миру .." (С)
← →
Verg © (2004-02-19 19:05) [4]
> [2] Digitman © (19.02.04 17:16)
> рискну "потелепатить")
>
> автор стартует поток и пытается в его контексте запросить
> гипертекст упомянутыми (блокирующими !) ср-вами ..
>
> не дождавшись по каким-то причинам исполнения запроса (мало
> ли оных м.б.), автор ничтоже сумняшеся "лупит" потоку "по
> мозгам" вызовом TerminateThread, ибо при блокир.вызове иных
> способов "укротить" трэд явно нет ...
Строго говоря - есть способ. И "Индейцы" им пользуются.
Давай так, один поток вошел в нирвану по поводу, например, connect(s,...
Зато другой в это время может сделать closesocket(s).
На что тот, который не этот (записки кота плинтуса :))) немедля очнется от connect-а с причиной WSAENOTSOCK.
← →
Digitman © (2004-02-20 15:50) [5]
> Verg © (19.02.04 19:05) [4]
согласен.
но это надо заранее предусмотреть ... в виде каких-то глобальных для всех заинтересованных потоков структур данных, хранящих инф-цию об открытых гнездах и пр.
← →
csr © (2004-02-20 15:57) [6]Дак ведь насколько я знаю, при вызове TerminateThread WinApi, я принудительно вызываю OnTerminate событие для текущего потока.... А вот это событие я ловлю и все занятые ресурсы освобождаю... Типа убиваю экземпляр TidHTTP и проч... ДАк в чем же дело?
← →
Digitman © (2004-02-20 16:05) [7]
> Дак ведь насколько я знаю, при вызове TerminateThread WinApi,
> я принудительно вызываю OnTerminate событие для текущего
> потока
ох как ошибаешься !!
никакие ни OnTerminate ни прочие ф-ции/методы не вызываются - поток просто скоропостижно и покорно умирает по твоей же команде
← →
Digitman © (2004-02-20 16:07) [8]ты станд.хэлп к этой ф-ции вообще-то читал ?
← →
Verg © (2004-02-20 16:18) [9]Да, кроме того, сокеты (любые, включая list-отвые), как "собственность" процесса а вовсе не потока, остаются жить как ни в чем не бывало. Отсюда и "незакрытые" порты.
← →
csr © (2004-02-20 19:31) [10]В док-ции это явно не написано... Дак что ж делать-то... Юзать Terminate метод класса потока - не могу, т.к. долго потоки убиваются, если их больше 100 ... А этой АПИ ф-цией - все быстро и без ошибок...
← →
Rouse_ © (2004-02-20 19:39) [11]Ну тебе ж дали совет. Делай closesocket а затем прибивай поток.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c