мне необходимо проверить наличие интернета.
в винвовс ечть функция gethostbyname. если IP возвращается значит инет есть.
но я пишу под линуксом. там нет этой функции.
подскажите как можно решить пролемму.
fpc 2.5; lazarus 0.9.29; ubuntu 10.4 gnome
gethostbyname
Модератор: Модераторы
Функция gethostbyname не гарантирует наличие интернет подключения!
Если у вас машина подключена к ЛВС будет возвращаться IP отличный от 127.0.0.1, а это не гарантирует, что есть подключение к интернет.
Если у вас машина подключена к ЛВС будет возвращаться IP отличный от 127.0.0.1, а это не гарантирует, что есть подключение к интернет.
я это знаю. я возвращаю IP google.com в видовс все работает мне для линускса надо. да и мне не важен IP
метод не подходит так как netdb истользует hosts, а не стучиться в интернет
Добавлено спустя 2 часа 20 минут 31 секунду:
решил проблемму так
т.е. вызываю терминальный пинг и считываю что он тан понаписал. если инета нет то в pro.Output хранится NULL
Код: Выделить всё
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
