Wyjątek w TIdIcmpClient

0

Haj. Mam kawałek kodu sprawdzającego istnienie komputera w sieci lokalnej. O ile nie ma problemu z hostami, które są zarejestrowane w DNS, a nie odpowiadają na pinga, o tyle w przypadku braku komputera o danej nazwie, wyskakuje wyjątek z Pinga.Ping (TIdIcmpClient):
Socket error #11001 host not found
robi skok do Pinga.Free, debug F7 i znowu wskakuje do linii Pinga.Free, po czym funkcja UdzialDostpny wraca do TWatekPobor.Execute, gdzie wychodzi w pole..., w każdym razie nie przechodzi do następnej linii. Czy jest jakaś metoda, żeby zneutralizować działanie szkodliwego wyjątku?

(Delphi7)

function UdzialDostepny(Nazwa: string): Boolean;
  var
    strBufor: string;
    NrZnak: Integer;
    Pinga: TIdIcmpClient;
  begin
  Result := False;
  try
  Pinga := TIdIcmpClient.Create(Application);
  Pinga.Host := Nazwa;
  Pinga.Ping; //wyjątek przy nieistniejącym hoście
  if (Pinga.ReplyStatus.BytesReceived > 0) then
    Result := True;
  finally
  Pinga.Free;
  end;
  end;

procedure TWatekPobor.Execute;
  begin
  inherited;
  while not Terminated do
    begin
    while (stlSciezkaPoczatkowa.Count > 0) and (not Spis.Przerwij) do
      begin
//      try
      if UdzialDostepny(stlSciezkaPoczatkowa[0]) then //wezwanie "trefnej" funkcji
        Spis.Pobierz(stlSciezkaPoczatkowa[0]);
//      finally
      stlSciezkaPoczatkowa.Delete(0);
//      end;
      end;
    if Assigned(OnKoniecPoboru) then
      OnKoniecPoboru(Self);
    Suspend;
    end;
  end;
0

Nie udało mi się pokonać wyjątku :/. Jeśli kogoś interesuje rozwiązanie, to wygląda następująco - sprawdzam najpierw istnienie hosta

if Assigned(GetHostByName(PChar(NazwaHosta))) then ...

, dopiero później go pinguję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1