This simple piece of code attached was working fine in 3.0 but in 3.1 blocks
at line 55.
The program send locally "echo" from client to worker using this topology:
DEALER[client]->ROUTER[frontend]->ROUTER[backend]->DEALER[worker]
In 3.1, it seems the worker socket MUST register by sending some data first
to the backend before the client can route "echo" to worker.
In 3.0, it was not necessary. A simple connect to backend was sufficient.
Is the 3.1 behaviour the expected behaviour?
thanks,
Benoit
// TestZMQ.cpp : Defines the entry point for the console application.
//
#include <zmq.hpp>
#include <string>
#include <list>
using namespace zmq;
using namespace std;
int main( )
{
context_t context(1);
socket_t client(context,ZMQ_DEALER);
socket_t frontend(context,ZMQ_ROUTER);
socket_t backend(context,ZMQ_ROUTER);
socket_t worker(context,ZMQ_DEALER);
frontend.bind("tcp://*:5555");
backend.bind("tcp://*:5556");
const char clientid[] = "client";
client.setsockopt(ZMQ_IDENTITY,clientid,6);
client.connect("tcp://localhost:5555");
const char workerid[] = "worker";
worker.setsockopt(ZMQ_IDENTITY,workerid,6);
worker.connect("tcp://localhost:5556");
char buffer[32] = {0};
const char message[] = "echo";
std::list<string> router_frames,worker_frames;
client.send(message,4);
int recvmore = 1;
size_t recvmoresize = sizeof(recvmore);
while(recvmore)
{
size_t size = frontend.recv(buffer,32);
router_frames.push_back(string(buffer,size));
frontend.getsockopt(ZMQ_RCVMORE,&recvmore,&recvmoresize);
}
//route msg to worker
router_frames.push_front(string(workerid));
for (std::list<string>::const_iterator frameIt = router_frames.begin();
frameIt != router_frames.end(); )
{
const string &frame = *frameIt;
backend.send(frame.data(),frame.size(), ++frameIt !=
router_frames.end() ?
ZMQ_SNDMORE : 0 );
}
recvmore = 1;
while(recvmore)
{
size_t size = worker.recv(buffer,32);
worker_frames.push_back(string(buffer,size));
worker.getsockopt(ZMQ_RCVMORE,&recvmore,&recvmoresize);
}
return 0;
}
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev