[zeromq-dev] Compiling zmq inside program
Pasi Mankinen
mailing.list at manageapp.com
Fri Jan 20 00:36:09 CET 2012
I debugged this code with 2.1.11 and 3.1.1. and tracing packets with CocoaPacketAnalyzer.
After connect and sleep (1) both versions have 7 packets transferred. First packet to have payload is packet number 4 [ACK,PUSH].
In v2.1.11:
- packet 4:
00000 07 7e 57 4f 52 4b 45 52 .~WORKER
- packet 6:
00000 07 7e 53 45 52 56 45 52 .~SERVER
In v3.1.1:
- packet 4:
00000 07 00 53 45 52 56 45 52 ..SERVER
- packet 5:
00000 07 00 57 4f 52 4b 45 52 ..WORKER
After this I debugged more and found that v3.1.1 never sends anything and code will block forever in zmq_recvmsg.
In v2.1.11 in method zmq::xrep_t::xsend this.current_out gets a value. In v3.1.1 this.current_out is always 0x0 and code never goes inside "if (current_out)":
line #159: // Push the message into the pipe. If there's no out pipe, just drop it.
line #160: if (current_out) {
This is not my code, it is zmq example code and it should work in 3.1.1 too. I see that the others have problems with zmq_recv blocking. Maybe it is the same bug?
> I'm looking for XREP bug, issue LIBZMQ-304. I only use XREP so I can't continue to test 3.1.x. Following program crashes in Windows and hangs forever in OSX.
> line: s_dump(worker) -> zmq_recvmsg(socket, &message, 0).
>
> static void MA_Zmq_Test()
> {
> long err;
> void *context = zmq_init (1);
>
> void *worker = zmq_socket (context, ZMQ_XREP);
> err = zmq_setsockopt (worker, ZMQ_IDENTITY, "WORKER", 6);
> //err = zmq_bind (worker, "ipc://rtrouter.ipc");
> err = zmq_bind (worker, "tcp://127.0.0.1:5555");
>
> void *server = zmq_socket (context, ZMQ_XREP);
> err = zmq_setsockopt (server, ZMQ_IDENTITY, "SERVER", 6);
> //err = zmq_connect (server, "ipc://rtrouter.ipc");
> err = zmq_connect (server, "tcp://127.0.0.1:5555");
>
> //zmq_sleep (1); // sleep in seconds
> #if VERSIONWIN
> Sleep (1 * 1000);
> #else
> sleep (1);
> #endif
> s_sendmore (server, (char *)"WORKER");
> s_sendmore (server, (char *)"");
> s_send (server, (char *)"send to worker");
> s_dump (worker);
> ...
--
Regards,
Pasi Mankinen
Finland
More information about the zeromq-dev
mailing list