-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返されると思いましたが、代わりにメモリアクセス違反がスローされます。

4

1 に答える 1

0

いいよ気にしないで。呼び出して、hiredis が使用しているファイル記述子を単純に閉じることができました...

close (redis -> fd);

...そして、redisGetReplyきちんと返します。

または、コマンドを送信するQUITと、ブロッキング サブスクリプションが返されます。

于 2014-12-18T09:46:10.927 に答える