如何取消hiredis阻止操作

时间:2014-12-17 17:03:22

标签: c++ blocking hiredis

如下所示运行阻止订阅会停止redisGetReply上的程序(来源:hiredis#pipelining

void subscribe (std::string& key, Subscriber* subscriber)
{
    void* reply = redisCommand (redis, "SUBSCRIBE %s", key.c_str ());
    freeReplyObject (reply);
    while (redisGetReply (redis, &reply) == REDIS_OK)
    {
        subscriber -> notify ();
        freeReplyObject (reply);
    }
}

我想通过调用redisFree(通过信号处理)套接字将被关闭并返回redisGetReply,如hiredis#cleaning-up所述,而是抛出内存访问冲突。

1 个答案:

答案 0 :(得分:0)

好的,没关系。我设法通过调用...

简单地关闭hiredis正在使用的文件描述符
close (redis -> fd);

... redisGetReply正确返回。

或者,可以发送QUIT命令并返回阻止订阅。