I attached msgrecv.cpp and msgsend.cpp to this message.

Run msgrecv, then msgsend.

If I send SIGINT to msgsend by pressing Ctrl+C,
I often see "Assertion failed: pfd.revents & POLLIN (signaler.cpp:155)"

Why does the error occur?
#include <czmq.h>

int main(int argc, char** argv)
{
    zctx_t* ctx=zctx_new();
    void *reply=zsocket_new(ctx, ZMQ_REP);
    zsocket_bind(reply, "tcp://127.0.0.1:2300");
    printf("Listening on tcp://127.0.0.1:2300\n");

    while(true)
    {
        zmsg_t *msg=zmsg_recv(reply);
        if(!msg)
            break;
        zmsg_dump(msg);
        zmsg_destroy(&msg);

        msg=zmsg_new();
        zmsg_addstr(msg, "%s", rand()%10 ? "OK" : "FAIL");

        if(zmsg_send(&msg, reply) == -1)
            break;
    }

    zctx_destroy(&ctx);
    return 0;
}
#include <thread>
#include <czmq.h>
#include <stdlib.h>

void test(zctx_t* ctx)
{
    void *msgqueue=zsocket_new(ctx, ZMQ_SUB);
    void *requester=zsocket_new(ctx, ZMQ_REQ);

    zsocket_set_subscribe(msgqueue, "");
    zsocket_connect(msgqueue, "inproc://msgqueue");
    zsocket_connect(requester, "tcp://127.0.0.1:2300");

    while(true)
    {
        char* str=zstr_recv(msgqueue);
        if(!str)
            break;

        if(zstr_send(requester, str) == -1)
        {
            free(str);
            break;
        }
        free(str);

        str=zstr_recv(requester);
        if(!str)
            break;
        printf("%s\n", str);
        free(str);
    }
}

int main(int argc, char **argv)
{
    zctx_t* ctx=zctx_new();
    void *msgpub=zsocket_new(ctx,ZMQ_PUB);
    zsocket_bind(msgpub, "inproc://msgqueue");
    zclock_sleep(1000);

    std::thread msgsender(test, ctx);
    msgsender.detach();

    int i=0;
    while(!zctx_interrupted)
    {
        zmsg_t* msg=zmsg_new();
        zmsg_pushstr(msg, "%d", ++i);

        if(zmsg_send(&msg, msgpub) == -1)
            break;

        zclock_sleep(1000);
    }

    zctx_destroy(&ctx);

    return 0;
}
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to