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

Вниз

Зависает gethostbyaddr при запущенной аське что делать?   Найти похожие ветки 

 
MegaVolt ©   (2006-03-24 14:36) [0]

Добрый день.
Столкнулся с такой проблемой:
При запущенной аське зависает gethostbyaddr в моей проге.
С чем это может быть связано? Например может ли аська менять какие либо параметры таймаутов или ещё что.
И как сделать чтобы всё работало?


 
Сергей М. ©   (2006-03-24 14:59) [1]


> запущенной аське


Кто такая "запущенная аська" ? В лицо ?


 
MegaVolt ©   (2006-03-24 15:03) [2]

>Кто такая "запущенная аська" ? В лицо ?

ICQ Version 2002а
Build #3727


 
Сергей М. ©   (2006-03-24 15:17) [3]


> MegaVolt ©   (24.03.06 15:03) [2]


Хм .. Произнести фразу "ICQ-клиент такой-то версии разработки фирмы Мирабилис" - это , видать, сложно ..


> может ли аська менять какие либо параметры таймаутов или
> ещё что


Не думаю.
Накой ему это надо, спрашивается ?

Думаю, проблема в чем-то другом


 
MegaVolt ©   (2006-03-24 15:32) [4]

>Хм .. Произнести фразу "ICQ-клиент такой-то версии разработки фирмы Мирабилис" - это , видать, сложно ..

Я же и написал ICQ версии 2002а произведён ICQ Inc

>Думаю, проблема в чем-то другом
Какие есть идеи? Зависимасть чёткая и стабильная.


 
MegaVolt ©   (2006-03-24 16:03) [5]

>Накой ему это надо, спрашивается ?

Например для своей работы аська допускает большие задержки ответа из сети поэтому она настраивает таймаут на то значение которое её нужно. Я же никаких таймаутов не настраиваю и поэтому при запущенной аське пользуюсь её настройками и возможно gethostbyaddr не зависает а просто ждёт очень большой таймаут.


 
Сергей М. ©   (2006-03-24 16:24) [6]


> Я же и написал ICQ версии 2002а произведён ICQ Inc


ГДЕ в первоначальном вопросе это фигурирует ?
НИгде.

Цитирую тебя:


> При запущенной аське


Да фих тебя знает, что ты имешь ввиду при этом под выражением "заспущенная аська") ..


> при запущенной аське пользуюсь её настройками


ЭТО еще  куда ?)


 
MegaVolt ©   (2006-03-24 16:42) [7]

>ЭТО еще  куда ?)

Если настройки которые делает аська глобальные то моя программа автоматом их использует.


 
Rouse_ ©   (2006-03-26 00:32) [8]

Мдя... Я же тебе разьяснял принцип данного действия в привате. Так и не получилось? Давай - делай демо пример который у тебя стабильно виснет и кидай сюда... Будем разбираться.


 
MegaVolt ©   (2006-03-27 10:45) [9]

>делай демо пример который у тебя стабильно виснет

Он виснет достаточно редко но при запущенной Аське на одном из 300 компов зависает.

При незапущенной нормально проходит всё что положено.

Причём есть зависимость от чего то ещё. Т.к. иногда и при аське не виснет :(

Если удастся локализовать баг выложу код.


 
MegaVolt ©   (2006-03-27 16:58) [10]

Короче виснет вот этот код


function GetHostByIP(ADDR: cardinal;OsNT:boolean):string;    // Определение имени компьютера по IP адресу
var HOST: PHostEnt;
begin
 ADDR:=InvertIP(ADDR);
 HOST:=gethostbyaddr(@ADDR,4,AF_INET);
 if HOST <> nil
   then
     begin
       SetLength(Result,Length(Host.h_name));
       if OsNT
         then Result:=Host.h_name
         else OemToChar(Host.h_name,@Result[1]);
     end
   else result:="";
end;


 
Rouse_ ©   (2006-03-27 17:40) [11]

Что такое InvertIP(ADDR);?


 
MegaVolt ©   (2006-03-27 19:00) [12]

>Что такое InvertIP(ADDR);

Моя функция которая переставляет порядок следования байт

Обнаружил ещё одну особенность.
Если оставить отну  gethostbyaddr то всё пашет хорошо. Если добавить в коде ещё и подключение компа
WNetAddConnection2
WNetCancelConnection2
То начинает виснуть :(

Код такой:


var
 temp:TNetResource;

 with temp do
   begin
     dwType:= RESOURCETYPE_DISK;
     lpLocalName:= nil;
     lpRemoteName :=PChar("\\"+s);
     lpProvider:="";
   end;
 j:=WNetAddConnection2(temp,nil,nil,0);  // Подключить компутер

...

 WNetCancelConnection2(temp.lpRemoteName,0,false);



Т.е. получается что вызов этих функций как то сказывается на последующих вызовах gethostbyaddr


 
Rouse_ ©   (2006-03-28 10:22) [13]

Вот скорее всего на этом у тебя и виснет ибо не обьявлен lpProvider.
Код определения имени провайдера:

function TMainForm.GetProvider(const CompName: String): String;
var
 Buffer: array [0..255] of Char;
 Size: DWORD;
begin
 Size := SizeOf(Buffer);
 if WNetGetProviderName(WNNC_NET_LANMAN, @Buffer, Size) <> NO_ERROR then
   Result := "absent"
 else
   Result := String(Buffer);
end;


 
MegaVolt ©   (2006-03-28 11:45) [14]

Определение имени провайдера не помогло.

Наблюдение:
Частота зависания с аськой и без аськи отличаются примерно раза в три. Без аськи один зависон на 1500 компов. С аськой один на 500.


 
MegaVolt ©   (2006-03-28 15:34) [15]

Сергей М.
А зачем было знать версию Аськи? Есть какие то извесные глюки с другими версиями аськами?


 
Сергей М. ©   (2006-03-28 15:59) [16]


> зачем было знать версию Аськи?


Где я спрашивал про "версию" ?!

Я спрашивал про  конкретного клиента этой сети) ... Коих на сей день существует несметное множество - Mirabilis ICQ Client, Miranda, Trillian, RAT &RQ и т.д. и т.п.


 
MegaVolt ©   (2006-03-28 16:51) [17]

Значит есть какие то глюки с этими клиентами?


 
Сергей М   (2006-03-28 18:53) [18]

Мною таковые не замечены


 
MegaVolt ©   (2006-03-29 10:25) [19]

>Мною таковые не замечены

Тогда какая разница какой клиент? ;)


 
Сергей М. ©   (2006-03-29 10:35) [20]


> какая разница какой клиент?


Ну мало ли какой еще (кроме широкоизвестных) ты пользуешь ..


 
MegaVolt ©   (2006-03-30 13:01) [21]

Вставка в конце каждого потока Sleep(1000); существенно улучшила ситуацию но окончательно проблему не сняла.


 
Сергей М. ©   (2006-03-30 13:23) [22]


> Вставка в конце каждого потока


Что есть "конец потока" ?

Иллюстрируй в коде ..


 
MegaVolt ©   (2006-03-30 18:38) [23]


Старт поток
Пинг
извлечь MAC
если Mac есть
 выполнить
   begin
      GetHostByAddr;
      WNetAddConnection2;
      WNetCancelConnection2;
   end;
Sleep(1000);
конец потока


 
Сергей М. ©   (2006-03-31 08:26) [24]

И как этот код связан с "настройками аськи" ?
К тому же ты утверждаешь, что поток виснет до sleep"a ..


 
MegaVolt ©   (2006-03-31 10:34) [25]

>И как этот код связан с "настройками аськи" ?

Если бы я знал :(

>К тому же ты утверждаешь, что поток виснет до sleep"a ..

Если при добавлении WNetAddConnection2;  WNetCancelConnection2; начинает виснуть GetHostByAddr; то логично предположить что виснет следующий поток а не текущий. Как это возможно понятия не имею. Возможно данные операции требуют некого времени для своего завершения. И если не дать им этого времени то GetHostByAddr; может зависнуть.

Но факт остаётся фактом. Глюк существенно уменьшился.


 
Сергей М. ©   (2006-03-31 10:44) [26]

Думаю что Аська со своими "настройками" здесь совершенно ни при чем - дело происходит в Маздае (Маздай = win9x/Me), а маздайная реализация WNet-функциональности всегда славилась своей "глюкавостью".


 
MegaVolt ©   (2006-03-31 11:15) [27]

>Думаю что Аська со своими "настройками" здесь совершенно ни при чем

Опыт говорит о другом. А что именно влиет определить сложно. Или кривая реализация чего то в аське мешающее работать другим прогам в сети. Или сама винда которая не тянет такую нагрузку. Хотя количеством потоков я пробовал играть. Резульат тот же.


 
Сергей М. ©   (2006-03-31 11:23) [28]

А что собственно подразумевается под "зависает" ?

Ф-ция GetHostByAddr будучи вызванной совсем не возвращает управление или выполняется неоправданно долго ?

Может следует отказаться от блокирующей ф-ции в пользу ее асинхронной версии (WSAAsyncGetHostByAddr) ?


 
MegaVolt ©   (2006-03-31 11:37) [29]

>Ф-ция GetHostByAddr будучи вызванной совсем не возвращает управление или выполняется неоправданно долго ?

Точно не знаю. Но за время порядка часа она управление не вернула :(

>Может следует отказаться от блокирующей ф-ции в пользу ее асинхронной версии (WSAAsyncGetHostByAddr) ?

Это существенно изменит логику работы приложения. Да и сама функция без WNetAddConnection2;  WNetCancelConnection2; работает просто великолепно.


 
Сергей М. ©   (2006-03-31 12:32) [30]


> Точно не знаю


А отладчик на что ?


> Это существенно изменит логику работы приложения


Ну хотя бы ради эксперимента ..


 
MegaVolt ©   (2006-03-31 13:15) [31]

>А отладчик на что ?

А как отловить отладчиком зависание некой функции в многопоточном приложении если вероятность зависания 1/500?


 
Сергей М. ©   (2006-03-31 13:32) [32]

А в чем вообще тайный смысл подключать ресурс и тут же его отключать ?


 
MegaVolt ©   (2006-03-31 14:36) [33]

Смысл в том чтобы найти где у бага ноги растут. А реально после подключения компа ещё его сканирование есть. Но оно время отнимает а пока ещё не глючило. Поэтому и выключено



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

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

Наверх





Память: 0.54 MB
Время: 0.071 c
15-1153654286
Firefly
2006-07-23 15:31
2006.08.20
ТЗ


3-1150262657
abhtr
2006-06-14 09:24
2006.08.20
Помогите составить запрос


2-1154507733
Id
2006-08-02 12:35
2006.08.20
Word and Delphi


2-1154066675
Neket
2006-07-28 10:04
2006.08.20
Проблема с фильтром в DBGrid


15-1153486847
Курдль
2006-07-21 17:00
2006.08.20
В "винном кризисе" виноваты автоматизаторы.





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