gethostbyname

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

gethostbyname

Сообщение azatsh »

мне необходимо проверить наличие интернета.
в винвовс ечть функция gethostbyname. если IP возвращается значит инет есть.
но я пишу под линуксом. там нет этой функции.
подскажите как можно решить пролемму.
fpc 2.5; lazarus 0.9.29; ubuntu 10.4 gnome
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Функция gethostbyname не гарантирует наличие интернет подключения!
Если у вас машина подключена к ЛВС будет возвращаться IP отличный от 127.0.0.1, а это не гарантирует, что есть подключение к интернет.
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Сообщение azatsh »

я это знаю. я возвращаю IP google.com в видовс все работает мне для линускса надо. да и мне не важен IP
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Сообщение azatsh »

метод не подходит так как netdb истользует hosts, а не стучиться в интернет

Код: Выделить всё

  SResolveFile   = '/etc/resolv.conf';
  SServicesFile  = '/etc/services';
  SHostsFile     = '/etc/hosts';
  SNetworksFile  = '/etc/networks';
  SProtocolFile  = '/etc/protocols';   


Добавлено спустя 2 часа 20 минут 31 секунду:
решил проблемму так

Код: Выделить всё

function conn:Boolean;
var
pro:TProcess;
list:TStringList;
begin
  Result:=false;
  pro:=TProcess.Create(nil);
  pro.CommandLine:='ping www.google.com -c 1' ;
  Pro.Options := Pro.Options + [poWaitOnExit, poUsePipes];
  pro.Execute;
  list:=TStringList.Create;
  list.LoadFromStream(pro.Output);
  pro.free;
  if list.Count>0 then  Result:=true;
  list.free;
end;

т.е. вызываю терминальный пинг и считываю что он тан понаписал. если инета нет то в pro.Output хранится NULL
Ответить