-2

像下面这样运行阻塞订阅会在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所述,而是引发内存访问冲突。

4

1 回答 1

0

好的没关系。我设法通过调用...简单地关闭了hiredis正在使用的文件描述符。

close (redis -> fd);

...并redisGetReply正确返回。

或者,可以发送一个QUIT命令,然后阻止订阅返回。

于 2014-12-18T09:46:10.927 回答