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