2015-02-27 3 views
0

Есть ли способ, которым я могу отменить curl_easy_perform в C++ ??Отменить curl_easy_perform, пока он пытается подключиться

У меня есть сценарий, где я пытаюсь подключиться к сети ресурса, который отсутствует и curl_easy_perform занять определенное количество времени, прежде чем она возвращает CURLE_COULDNT_CONNECT. Но в то же время пользователь закрыл пользовательский интерфейс, который хочет подключиться, и я хочу немедленно отключить завиток и не ждать, пока он не сможет подключиться.

Я попытался хранить локон указатель, который я использую:

CURL *pEasy = curl_easy_init(); 

И потом, когда он делает curl_easy_perform я назвал

curl_easy_cleanup(pEasy); 

В попытке освободить или «стоп» завиток соединения но он разбился, и я получил следующую ошибку от curl_easy_perform:

Unhandled exception at blah blah: Access violation reading location 0x00000004. 

Есть ли способ отменить попытку подключения ???? Я прочел эту ссылку: How can I immediately cancel a curl operation?, но он, похоже, справится с отменой завитущего соединения после того, как он успешно подключился.

EDIT - РЕШЕНИЕ

Я обнаружил, что если я называю:

curl_easy_reset(pEasy); 

Тогда

curlResult = curl_easy_perform (pEasy); 

возвращается почти сразу же с результатом CURLE_OPERATION_TIMEDOUT.

Я думаю, что это то, что мне нужно :)

+0

Извините, но это «решение» кажется мне совершенно неправильным ... –

+0

Это не похоже на решение, на вопрос «Как отменить операцию немедленно». Я также ищу прямой ответ на этот вопрос. Пожалуйста, дайте мне знать, если они есть. – Swtsvn

ответ

1

Вместо того, чтобы отменить попытку, вы можете установить connection timeout заранее, например. :

curl_easy_setopt(pEasy, CURLOPT_CONNECTTIMEOUT, 5); 
+0

Даже это слишком долго для отзывчивости интерфейса, способ разработки пользовательского интерфейса, если было несколько подключений, тогда все они соединяются один за другим, поэтому его 5xNumConnections –

+0

см. Мое редактирование –

0

Вы можете запустить curl_easy_perform в потоке и сохранить CURL объект.

При вызове объекта CURL curl_easy_setopt(m_chatCurl, CURLOPT_TIMEOUT_MS, 1) всякий раз, когда вы хотите закрыть соединение.

Таким образом, соединение будет тайм-аутом, и нить сможет завершить.

Смежные вопросы