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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
1-1120555327
Ded Moroz
2005-07-05 13:22
2005.07.25
WinXP Manifest


1-1120553046
Still Swamp
2005-07-05 12:44
2005.07.25
Как грамотно сделать ожидание в треде


14-1120463236
Layner
2005-07-04 11:47
2005.07.25
Немного об автоматизации работы.


3-1118396661
Леонид
2005-06-10 13:44
2005.07.25
Как узнать значение поля после инсерта, поле автоинкрементное


1-1120894062
serguncho
2005-07-09 11:27
2005.07.25
Информация из Stringgrid на печать





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