libcurl rtsp在获得siganl时拆解

时间:2016-09-02 01:52:40

标签: curl signals rtsp


我正在使用来自https://curl.haxx.se/libcurl/c/rtsp.html的libcurl编写rtsp代码。 我写了信号处理程序以捕捉Ctrl + C并拆除curl / uri以在播放时关闭会话。
我收到错误消息 - “curl_easy_perform()失败:初始化失败”但我已经初始化了main函数中的curl。

======代码部分========


#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include <signal.h>
CURL *curl;
char *uri ;
static void rtsp_teardown(CURL *curl, const char *uri)
{
curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_TEARDOWN);
curl_easy_perform(curl);
}
void sighand(int signo){

switch(signo){

case SIGQUIT:
rtsp_teardown(curl,uri);
}
}

void signal(){

struct sigaction actions;
memset(&actions, 0, sizeof(actions));
sigemptyset(&actions.sa_mask);
actions.sa_flags = 0;
actions.sa_handler = sighand;
signal(SIGQUIT, sighand);

}
/*
rtsp option,describe .. could be found from url above.
*/
int main()
{
/*
initial variable could be found from url above
*/
signal();
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if(curl != NULL) {
rtsp_options(curl, uri);
rtsp_describe(curl, uri);
rtsp_setup(curl, uri, transport);
rtsp_play(curl, uri, range);
}
return 0;
}

========================

1 个答案:

答案 0 :(得分:0)

这段代码看起来代码应该&#34;通过&#34;可以这么说,在rtsp_play()之后没有任何东西可以等待(除非你在例程中有一些阻止返回的东西)。 在 Ctrl + \ 之后调用 SIGQUIT Ctrl + C 发送 SIGINT link

除了检查指针是否为NULL之外,它总是一个很好的做法(在这种情况下信号处理器检查它是否仍然是一个有效的指针)。