libcurl продолжает работать после обратного вызова функции записи
Я пытаюсь использовать библиотеку libcurl в C с API pushbullet. Я пытаюсь подключиться к потоку по адресу https://stream.pushbullet.com/streaming/. Проблема в том, что когда функция обратного вызова вызывается, когда она получает какие-либо данные, соединение закрывается. Я хотел бы, чтобы он работал бесконечно, и чтобы он вызывал функцию обратного вызова при каждом получении новых данных.
Вот код, который я пробовал
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
int getwss_cb(char *data) {
printf("Received data: %s\n", data);
}
int getwss(void) {
CURL *easyhandle = curl_easy_init();
curl_easy_setopt(easyhandle, CURLOPT_URL, "https://stream.pushbullet.com/streaming/<access-token>");
curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, getwss_cb);
curl_easy_perform(easyhandle);
return 0;
}
В основном мне нужна функция getwss(), чтобы продолжить работу даже после запуска getwss_cb()
1 ответ
Ваш обратный вызов не использует правильный прототип и не возвращает правильный код возврата:
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
Смотрите полные документы, объясняющие обратный вызов и что он должен возвращать в документации для опции CURLOPT_WRITEFUNCTION.
Также обратите внимание, что данные, которые передаются в обратный вызов, не заканчиваются нулем, поэтому вы не можете просто напечатать их.