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


Автор: chubaka 5.8.2009, 08:53
Загружаю страницу посредством cURL через SOCKS4 прокси.
Функция выглядит так:

Код
bool http_get_via_proxy(const char *ip, int port)
{
    CURL *curl;
    CURLcode result;    
    std::string buffer;

    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, "http://www.bing.com/");
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);        
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);
        curl_easy_setopt(curl, CURLOPT_HEADER, true);
        curl_easy_setopt(curl, CURLOPT_PROXY, ip);
        curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
        curl_easy_setopt(curl, CURLOPT_PROXYPORT, port);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
                                                          
        result = curl_easy_perform(curl); // на этом месте иногда программа зависает и уже не отвечает
        if (result == CURLE_OK)
        {
            curl_easy_cleanup(curl);
            return true;
        }
        else
        {
            curl_easy_cleanup(curl);
            return false;
        }
    }

    return false;
}


Почему в некоторых случаях вызов curl_easy_perform блокирует работу программы ? Таймауты установлены, программа работает нормально несколько часов и потом зависает. После мучительного дебага было установлено что блокирует именно функция curl_easy_perform.

Помогите пожалуйста!

Автор: JackYF 6.8.2009, 12:38
chubaka, а вруби дебаг-опции Curl'a, авось, что-то прояснится.

Автор: chubaka 6.8.2009, 19:36
А не подскажите как работает эта опция ? Или пример ? 
Просто если программа зависла то и результат дебага никуда не запишу.. Или она самостоятельно может кудато в файл?

Автор: MAKCim 6.8.2009, 20:51
Цитата(chubaka @  6.8.2009,  19:36 Найти цитируемый пост)
А не подскажите как работает эта опция ? Или пример ? 

CURLOPT_DEBUGFUNCTION
CURLOPT_VERBOSE

а лучше когда повиснет через gdb глянь, на чем висит
подозреваю хреновый прокси

Автор: chubaka 7.8.2009, 22:47
Я тоже склоняюсь к тому что чтото не так с прокси, но программа ведь не должна виснуть.

Спасибо инфу, буду пробовать.

Автор: MAKCim 9.8.2009, 10:49
Цитата(chubaka @  7.8.2009,  22:47 Найти цитируемый пост)
но программа ведь не должна виснуть.

почему? она вполне может повиснуть на connect/recv

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