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

Вниз

Ping при количестве потоков >6 работает некорректно   Найти похожие ветки 

 
MegaVolt ©   (2005-04-13 17:39) [0]

Выдаёт ошибку 11006. При количестве потоков до 6 включительно никаких ошибок нету. Проблема в том что некорорые узлы которые есть не пингуются. Функция для пингования взята их FAQ


 
Piter ©   (2005-04-13 18:47) [1]

у тебя ошибка в программе


 
Piter ©   (2005-04-13 18:47) [2]

http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
MegaVolt ©   (2005-04-13 19:17) [3]

Допустим я задал вопрос не так. Что именно не хватает? Исходник находится в FAQ этого форума. Добавить на него ссылку? Выложить исходники всей программы? Или кусочка программы отвечающий за ping и являющийся копией того что выложено на этом сайте? Выложить кусок отвечающий за запуск потоков или ещё что то? Я с удовольствием дополню свой вопрос чем угодно если вы скажете что именно нехватает чтобы решить вопрос?

Программа до 6 потоков включительно работает так как нужно после 6 перестаёт это делать в 20-30% запросов.


 
MegaVolt ©   (2005-04-13 19:27) [4]

Хм... а с FAQ примерчик уже грохнули :(


function PingIP(IP:cardinal;var s:string):integer;
var
 hIP : THandle;
 pingBuffer : array [0..31] of Char;
 pIpe : ^icmp_echo_reply;
 pHostEn : PHostEnt;
 error : DWORD;
 destAddress : u_long;
 n:integer;
begin
   hIP := IcmpCreateFile();
   GetMem( pIpe, sizeof(icmp_echo_reply) + sizeof(pingBuffer));
   pIpe.Data := @pingBuffer;
   pIpe.DataSize := sizeof(pingBuffer);
   destAddress:=InvertIP(IP); // моя функция для придания нормального вида IP.
   Result:=-1;
   s:="";
   n:=IcmpSendEcho(hIP,destAddress,@pingBuffer,sizeof(pingBuffer),Nil,pIpe,sizeof(icmp_echo_reply) + sizeof(pingBuffer),100);
   error := GetLastError();
   if (error = 0)
     then
       begin
         Result:=pIpe.RTTime;
         s:=IPToStr(IP)+" "+IPToStr(InvertIP(pIpe.Address));
         {if Result<>-1
           then
             begin
               pHostEn := gethostbyaddr(@destAddress,4,AF_INET);
               error := GetLastError();
               if (error <> 0)
                 then s:=""
                 else
                   if Length(pHostEn^.h_name)<>0
                     then
                       begin
                         SetLength(s,Length(pHostEn^.h_name));
                         OemToChar(pHostEn^.h_name,@s[1]);
                       end
             end
           else s:="";}
       end
     else
       begin
         s:=IPToStr(IP)+" "+IPToStr(InvertIP(pIpe.Address))+" "+IntToStr(error)+" "+SysErrorMessage(error);
         Result:=-1;
       end;
   FreeMem(pIpe);
   IcmpCloseHandle(hIP);
end;


Так вот GetLastError выдаёт код 11006 при количестве потоков больше 6 хотя при количестве потоков меньше 6 этой ошибки нету. Что означает эта ошибка и как от неё избавится?


 
MegaVolt ©   (2005-04-13 20:07) [5]

Кстати а в WinXP не глючит :( Поставил для теста 26 потоков на ура прошло всё :( Кто знает что за особенность Win98 и как лечить? Может есть какие нибудь тонкости или хитрости???

Специалисты откликнитесь...


 
mutabor   (2005-04-15 14:39) [6]

2megavolt: вопрос в догонку:а ttl можно определить после send_echo?


 
MegaVolt ©   (2005-04-15 20:23) [7]

Вот вид возвращаемого результата. Там есть и ttl но я его не использовал.

icmp_echo_reply = packed record
       Address : u_long;      // Адрес отвечающего
       Status : u_long;     // IP_STATUS (см. ниже)
       RTTime : u_long;     // Время между эхо-запросом и эхо-ответом
        // в миллисекундах
       DataSize : u_short;      // Размер возвращенных данных
       Reserved : u_short;      // Зарезервировано
       Data : Pointer;  // Указатель на возвращенные данные
       Options : ip_option_information; // Информация из заголовка IP
   end;


 
MegaVolt ©   (2005-04-15 20:25) [8]

Сори не всё добавил ttl вот в этом поле ответа:

ip_option_information = packed record  // Информация заголовка IP (Наполнение
   // этой структуры и формат полей описан в RFC791.
       Ttl : byte;// Время жизни (используется traceroute-ом)
       Tos : byte;// Тип обслуживания, обычно 0
       Flags : byte;// Флаги заголовка IP, обычно 0
       OptionsSize : byte;// Размер данных в заголовке, обычно 0, максимум 40
       OptionsData : Pointer;// Указатель на данные
   end;




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

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-1120738656
qwer-10
2005-07-07 16:17
2005.07.25
Поиск файлов


1-1120816924
agafon12
2005-07-08 14:02
2005.07.25
Проблема с картинкой и оле контейнером


14-1120352779
Cheater
2005-07-03 05:06
2005.07.25
"Ведьма из Блэер". Чем кончилось?


11-1103547808
schooll
2004-12-20 16:03
2005.07.25
Прощай КОЛ...


1-1120547296
Slaga
2005-07-05 11:08
2005.07.25
Можно ли экспортировать из dll - overload процедуры