Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > ping в c++


Автор: semibug 31.12.2010, 22:36
В программе на C++ необходимо пинговать несколько заданных в файле конфигурации серверов.

Первое, что пришло на ум - использовать вызов system( "ping"  ); с соответствующими параметрами и обрабатывать её выход, а есть ли возможность использовать, например, какие-то библиотеки или функции ядра?
В linux новичок, не уловлю стратегию, возможно через программу ping и есть самое верное решение.


Автор: triclosan 1.1.2011, 18:57
Цитата(semibug @  31.12.2010,  22:36 Найти цитируемый пост)
использовать вызов system( "ping"  );

тогда уже дергать sh-скрипт, где все сконфигурено



Цитата(semibug @  31.12.2010,  22:36 Найти цитируемый пост)
использовать, например, какие-то библиотеки или функции ядра?

Можно сторонние либы поискать. Имхо, если стандартно ядром - то только самому посылать ICMP  и принимать ответ.

Автор: semibug 3.1.2011, 23:05
Использовал библиотечку liboping, получилось удобно.
Вопрос решен.

Автор: phpsc 12.1.2011, 21:34
выложи сюда исходный код

Автор: semibug 12.1.2011, 22:15
phpsc, как то так:

Код


#include <oping.h>

    bool ping( std::string host, int timeout )
    {
        bool ret = false;

        pingobj_t *pingobj = ping_construct();

        if ( pingobj == NULL )
            return ret;

        for (;;)
        {
            double timeout_sec = ( ( double ) timeout ) / ( double ) ( 1000.0 );
            if ( ping_setopt( pingobj, PING_OPT_TIMEOUT, &timeout_sec ) )
                break;

            if ( ping_host_add( pingobj, host.c_str() ) )
                break;

            if ( ping_send( pingobj ) <= 0 )
                break;

            ret = true;

            break;
        }

        ping_destroy( pingobj );

        return ret;
    }


Добавлено через 3 минуты и 51 секунду
Да, и ещё, если сеть не доступна (более точно сервер DNS), а в качестве хоста указано доменное имя (а не IP), то параметр timeout роли не играет, на вызове ping_host_add будет достаточно длительное ожидание. В моем случае вынес это дело в отдельный поток, и контролировал время, с последнего удачного пинга.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)