Форум: "Сети";
Текущий архив: 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